# -*- coding: utf-8 -*-
# The MIP problem solved in this example is:
# 问题描述
# Maximize x1 + 2 x2 + 3 x3 + x4
# Subject to
# - x1 + x2 + x3 + 10 x4 <= 20
# x1 - 3 x2 + x3 <= 30
# x2 - 3.5x4 = 0
# Bounds
# 0 <= x1 <= 40
# 0 <= x2
# 0 <= x3
# 2 <= x4 <= 3
# Integers
# x4
import cplex
from cplex.exceptions import CplexError
my_colnames = ["x1","x2","x3","x4"] #变量名称
my_obj = [1.0,2.0,3.0,1.0] #目标函数系数
my_ub = [40.0,cplex.infinity,cplex.infinity,3.0] #变量上界
my_lb = [0.0,0.0,0.0,2.0] #变量下界
my_ctype = "CCCI" #变量类型,I为整数
my_rhs = [20.0,30.0,0.0] #约束右侧的目标值
my_rownames = ["r1","r2","r3"] #约束名称
my_sense = "LLE" #约束的属性:L表示小于,E表示等于
rows = [[["x1", "x2", "x3", "x4"], [-1.0, 1.0, 1.0, 10.0]],
[["x1", "x2", "x3"], [1.0, -3.0, 1.0]],
[["x2", "x4"], [1.0, -3.5]]]# 设置约束的系数
def populatebyrow(prob):
prob.objective.set_sense(prob.objective.sense.maximize) #目标函数求最大
prob.variables.add(obj=my_obj,lb=my_lb,ub=my_ub,types=my_ctype,names=my_colnames) #变量设置
prob.linear_constraints.add(lin_expr=rows,senses=my_sense,rhs=my_rhs,names=my_rownames) #约束条件
my_prob = cplex.Cplex()
handle = populatebyrow(my_prob)
my_prob.solve()
print("最优目标值为 ", my_prob.solution.get_objective_value()) # 获取最优解的值
x = my_prob.solution.get_values() # 获取取得最优解的变量值
print(f'最优x取值为: {x}')
参考了 (1条消息) python调用cplex解决规划问题(一)_白小麦✔的博客-CSDN博客的内容,进行模仿编写,整体代码更符合学习逻辑