如何获取docpelx求解目标函数后的数据;在解决目标优化问题之后,如何获取相关数据;获取决策变量的具体数值

说明

本次的代码环境是 python中的 docplex 库。

通过 mdl.integer_var() 定义的决策变量,获取求解值

决策变量获取

  1. 直接对决策变量使用 .solution_value 获取自变量取值;
  2. 直接对模型的求解结果 mdl.solve() 获取 solution._get_all_values() 方法,获取全部决策变量的输出 (不区分决策变量,哪个是x,哪个是y)
x.solution_value 
solution._get_all_values() 

具体说一下:

solution._get_all_values() 

solution的类型是:
在这里插入图片描述

solution._get_all_values() 是将所有自变量的取值,不区分变量是哪一个(哪个是x, 哪个是y不做区分) 

在这里插入图片描述

目标函数取值获取

  1. 直接对模型 mdl 使用 objective_value 获取目标函数取值;
  2. 直接使用 solution.objective_value 获取。
mdl.objective_value 
solution.objective_value 
 

具体代码:

from docplex.mp.model import Model

# 创建模型
mdl = Model(name='factory_production')

# 定义变量
x = mdl.integer_var(lb=0, name='x')
y = mdl.integer_var(lb=0, name='y')

# 定义目标函数
mdl.maximize(5 * x + 10 * y)

# 定义约束条件
mdl.add_constraint(x + y <= 200)
mdl.add_constraint(2 * x + 3 * y <= 500)

# 求解
solution = mdl.solve()

# 输出结果
print("生产 A 产品的数量:", x.solution_value)
print("生产 B 产品的数量:", y.solution_value)
print("所有变量的取值", solution._get_all_values())

print("最大利润:", mdl.objective_value)
print("最大利润:", solution.objective_value)

运行结果
在这里插入图片描述

通过 mdl.continuous_var_list() 定义的决策变量,获取求解值

  1. 使用列表生成式,遍历每个决策变量,然后使用 .solution_value 属性,获取自变量取值
  2. 使用 mdl.iter_variables() 遍历变量输出
  3. 使用 mdl.solve() 的输出 solution 的 ._get_all_values() 方法,获取所有自变量的取值(不区分决策变量,哪个是x,哪个是y)
## 方式 1 
[xi.solution_value for xi in x]

## 方式 2 
var_dict = {} 
for var in mdl.iter_variables():
    var_dict[var.name] = var.solution_value 
## 方式2的列表生成式 
var_dict = {var.name:var.solution_value for var in mdl.iter_variables()}  

# 方式 3 
solution._get_all_values() 

具体代码

from docplex.mp.model import Model

mdl = Model(name='example_constraints')
x = mdl.continuous_var_list(3, lb=-1.0, ub=1.0, name='x')

constraints = [xi >= -0.5 for xi in x] + [xi <= 0.5 for xi in x]

for constraint in constraints:
    mdl.add_constraint(constraint)
    
obj = mdl.sum(x) 
mdl.maximize(obj) 

solution = mdl.solve()

## 方式 1 
print("x ==>> {}".format([xi.solution_value for xi in x]))

## 方式 2 
var_dict = {} 
for var in mdl.iter_variables():
    var_dict[var.name] = var.solution_value 
## 方式2的列表生成式 
var_dict = {var.name:var.solution_value for var in mdl.iter_variables()}  
print("var_dict  ==>>  ", var_dict)

# 方式 3 
print("solution._get_all_values() ==>>", solution._get_all_values()) 

运行结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值