docplex和numpy混合使用解决优化问题

该文介绍了如何结合docplex和numpy处理优化问题。首先通过numpy定义系数,然后使用docplex创建连续决策变量,设置不等式约束,如变量非负及和的限制,并定义目标函数(点积最大化)。最后,求解模型并输出决策变量的值和优化结果。
摘要由CSDN通过智能技术生成

docplex和numpy混合使用解决优化问题

使用背景

通过 numpy 定义存储自变量系数,或者参与自变量的四则运算;
通过 docplex 定义决策变量(自变量) ,添加约束,求解函数

使用方式:

# 导入库 
import numpy as np
from docplex.mp.model import Model

# 定义优化模型 
mdl = Model(name='example_dot')

# 定义系数数组、定义决策变量 
x = np.array([1, 2, 3])
y = mdl.continuous_var_list(3, lb=-1.0, ub=1.0, name='y')

# 定义约束条件 
cst = [y[i] >= 0 for i in range(3)] + [mdl.sum(y) <=4] + [mdl.sum([y[i] for i in range(1,3)]) == 2]
for c in cst: 
    mdl.add_constraint(c) 

# 定义优化函数 
dot_product = np.dot(x, y)

# 最大化优化函数,并求解  
mdl.maximize(dot_product)
solution = mdl.solve()

# 输出决策变量的结果 
if solution: # 使用 if 判断是否有结果
    print("y = {0}".format([y[i].solution_value for i in range(3)]))
    print("点积 = {0}".format(dot_product.solution_value))
else: 
    print("无解")

注意:

# 定义约束条件 
cst = [y[i] >= 0 for i in range(3)] + [mdl.sum(y) <=4] + + [mdl.sum([y[i] for i in range(1,3)]) == 2]

[y[i] >= 0 for i in range(3)]

  1. 在定义约束条件的时候,这里是用列表的形式存储约束条件的
  2. 决策变量是通过 mdl.continuous_var_list() 定义的,因此要遍历每一个变量,然后对其施加约束。

[mdl.sum(y) <=4]

  1. 这是针对所有的决策变量定义的约束条件,让它们的和小于某个数值。

[mdl.sum([y[i] for i in range(1,3)]) == 2]

  1. 针对 y1 和 y2 单独添加约束

cst 的输出形式如下图;其中 GE是 大于等于的约束;LE 是 小于等于的约束;EQ是 等于约束条件。

在这里插入图片描述

整个程序的运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值