参数定义
import random
n = 10
m = 5
set_I = range(1, n+1)
set_J = range(1, m+1)
c = {(i,j): random.normalvariate(0,1) for i in set_I for j in set_J}
a = {(i,j): random.normalvariate(0,5) for i in set_I for j in set_J}
l = {(i,j): random.randint(0,10) for i in set_I for j in set_J}
u = {(i,j): random.randint(10,20) for i in set_I for j in set_J}
b = {j: random.randint(0,30) for j in set_J}
导入模型
import docplex.mp.model as cpx
opt_model = cpx.Model(name='MIP_Model')
添加决策变量
- 添加连续变量
x = {(i,j):opt_model.continuous_var(lb=l[i,j],ub=u[i,j],name='x_{}_{}'.format(i,j)) for i in set_I for j in set_J }
- 添加0,1变量
y = {(i,j):opt_model.binary_var(name='y_{}_{}'.format(i,j)) for i in set_I for j in set_J }
- 整数变量
z = {
(i,j):opt_model.integer_var(lb=l[i,j],ub=u[i,j],name='z_{}_{}'.format(i,j)) for i in set_I for j in set_J
}
约束条件
在添加决策变量后,需要设置约束条件。任何约束都有:手边(通常是决策变量的线性组合)、右手边(通常是数值)和意义(小于或等于、等于、大于或等于)
constraints = {
opt_model.add_constraint(
ct = opt_model.sum(a[i,j] * x[i,j] for i in set_I ) <= b[j],ctname='constraint_{}'.format(j)
)
for j in set_J
}
目标函数
obj = opt_model.sum(c[i,j] * x[i,j] for i in set_I for j in set_J)
#最小化
opt_model.minimize(obj)
# 最大化
opt_model.maximize(obj)
#opt_model.objective.set_sense(opt_model.objective.sense.maximize)
模型求解
opt_model.solve()
打印结果
# 查看目标函数值
print("目标函数值:",opt_model.solution.get_objective_value())
# 查看最优解
print("最优解:",opt_model.solution.get_values())
ue())
# 查看最优解
for v in opt_model.iter_continuous_vars():
print(v," = ",v.solution_value)
参考
https://www.ibm.com/docs/zh/icos/12.9.0?topic=api-docplex-examples