获取优化问题的自变量取值和目标函数取值
- 说明
- 通过 mdl.integer_var() 定义的决策变量,获取求解值
- 决策变量获取
- 目标函数取值获取
- 具体代码:
- 通过 mdl.continuous_var_list() 定义的决策变量,获取求解值
- 具体代码
说明
本次的代码环境是 python中的 docplex 库。
通过 mdl.integer_var() 定义的决策变量,获取求解值
决策变量获取
- 直接对决策变量使用 .solution_value 获取自变量取值;
- 直接对模型的求解结果 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不做区分)
目标函数取值获取
- 直接对模型 mdl 使用 objective_value 获取目标函数取值;
- 直接使用 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() 定义的决策变量,获取求解值
- 使用列表生成式,遍历每个决策变量,然后使用 .solution_value 属性,获取自变量取值
- 使用 mdl.iter_variables() 遍历变量输出
- 使用 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())
运行结果