cplex求解2

利用cplex包中的模型求解

案例一

# max 3 * x1 + 5 * x2 + 4 * x3
# s.t.
# 2 * x1 + 3 * x2 <= 1500
# 2 * x2 + 4 * x3 <= 800
# 3 * x1 + 2 * x2 + 5 * x3 <= 2000
# x1, x2, x3 >= 0

导入模型

from docplex.mp.model import Model

model = Model()   #创建模型
var_list = [i for i in range(4)]  # 创建列表
X = model.continuous_var_list(var_list, lb=0, name="x")   #创建列表变量

model.maximize(3 * X[0] + 5 * X[1] + 4 * X[2])   #设定目标函数

#添加约束条件

model.add_constraint(2 * X[0] + 3 * X[1] <= 1500)
model.add_constraint(2 * X[1] + 4 * X[2] <= 800)
model.add_constraint(3 * X[0] + 2 * X[1] + 5 * X[2] <= 2000)

求解

sol = model.solve()

输出需要的结果变量

print(sol)
print(X)

求解结果

C:\ProgramData\Miniconda3\python.exe F:/optimize/cplex/cplex02.py
solution for: docplex_model1
objective: 2675
x_0=375.000
x_1=250.000
x_2=75.000

[docplex.mp.Var(type=C,name='x_0'), docplex.mp.Var(type=C,name='x_1'), docplex.mp.Var(type=C,name='x_2'), docplex.mp.Var(type=C,name='x_3')]

Process finished with exit code 0

案例二

整数规划

# max 800*x1 + 300*x2
# s. t.
# 	6 * x1 + 8 * x2 <= 120
# 	10 * x1 + 5 * x2 <= 100
# 	x1, x2 >= 0 且均为整数

代码

from docplex.mp.model import Model
model = Model()    #创建模型
x_list = [i for i in range(2)]   # 创建变量列表
X = model.integer_var_list(x_list, lb=0, name="x")    #创建列表变量

model.maximize(800 * X[0] + 300 * X[1])
model.add_constraint(6 * X[0] + 8 * X[1] <= 120)
model.add_constraint(10 * X[0] + 5 * X[1] <= 100)

sol = model.solve()
print(sol._get_all_values())
print(sol.get_objective_value())
print(sol.solve_details)

结果显示

C:\ProgramData\Miniconda3\python.exe F:/optimize/cplex/cplex03.py
[10.0, 0]
8000.0
status  = integer optimal solution
time    = 0.016 s.
problem = MILP
gap     = 0%

案例三.

from docplex.mp.model import Model

m = 5
n = 8
M = [i for i in range(1, m+1)]
N = [i for i in range(1, n+1)]
A = {(i, j) for i in M for j in N}
print(A)

W = 5000
weight = [1050, 1730, 2575, 3540, 1220, 1340, 1530, 1270]
weight_dict = {i : weight[i-1] for i in N}
print(weight_dict)

model = Model("MIP")    # 定义模型种类, 这里是混合整数规划“MIP"
# 定义变量,
y = model.binary_var_dict(M, name='y')
x = model.binary_var_dict(A, name='x')

#定义目标函数
model.minimize(model.sum(y[i] for i in M))

# #定义约束条件
model.add_constraints(model.sum(x[i, j] for i in M) == 1 for j in N)

model.add_constraints(model.sum(x[i, j] * weight_dict[j] for j in N) <= W*y[i] for i in M)

solution = model.solve()
print(solution)
C:\ProgramData\Miniconda3\python.exe F:/optimize/cplex/cplex04.py
{(4, 7), (1, 3), (4, 8), (5, 6), (2, 8), (2, 1), (1, 6), (3, 7), (2, 5), (5, 1), (5, 8), (1, 2), (3, 3), (5, 5), (4, 4), (1, 5), (3, 6), (2, 2), (4, 1), (1, 1), (3, 2), (2, 6), (5, 4), (4, 5), (5, 2), (1, 4), (2, 3), (4, 2), (3, 5), (2, 7), (5, 3), (4, 6), (3, 1), (5, 7), (3, 8), (1, 8), (4, 3), (1, 7), (3, 4), (2, 4)}
{1: 1050, 2: 1730, 3: 2575, 4: 3540, 5: 1220, 6: 1340, 7: 1530, 8: 1270}
solution for: MIP
objective: 3
y_1=1
y_3=1
y_5=1
x_1_3=1
x_1_6=1
x_5_5=1
x_1_1=1
x_5_2=1
x_5_7=1
x_3_8=1
x_3_4=1


Process finished with exit code 0
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值