解决优化问题的算法¶
在本例中,我们将考虑使用JuMP
库解决优化问题的标准算法。
JuMP.jl是一个开源库。该库实现了一种代数建模语言,允许用户使用各种求解器提出并解决各种优化问题。
库的安装¶
如果您的环境没有安装最新版本的JuMP
软件包,请取消注释并运行下面的方框:
Pkg.add(["JuMP", "HiGHS"])
#Pkg.add("JuMP");
要在安装完成后启动新版本的程序库,请单击 "我的账户 "按钮:
然后点击 "停止 "按钮:
按下 "Start Engee "按钮重新启动会话:
解决问题的算法¶
使用JuMP
解决优化问题的算法包括几个系统步骤,从问题的提出到结果的获得和解释。以下是解决问题的标准算法:
- 连接库
JuMP
、 - 选择并连接求解器库、
- 创建优化问题 变量声明 制定目标函数
- 设定条件 解决问题
- 得出结果 分析结果。
任务描述¶
在本例中,我们将找出变量 x 和 y 的值,使线性目标函数的值尽可能小: $$F = 13x + 22y \rightarrow min$$ 给定以下条件 $$3x + 8y >= 20 Условие 1$$ $$6x + 10y <= 100 Условие 2$$ 我们还将为变量 x 和 y 的值指定以下边界: $$x >= 1$$ $$0 <= y <= 20$$
解决问题¶
连接图书馆JuMP
:
using JuMP;
在本例中,我们使用 HiGHS.jl 求解器库。连接库HiGHS
:
using HiGHS;
使用函数Model()
创建一个优化问题,并在括号中指定求解器的名称:
optimization_problem = Model(HiGHS.Optimizer)
使用宏@variable
定义求解器变量。指定变量 x 和 y 的极限值:
@variable(optimization_problem, x >= 1);
@variable(optimization_problem, 0 <= y <= 20);
使用宏@objective
定义要优化的目标函数:
@objective(optimization_problem, Min, 13x + 22y);
使用宏@constraint
定义解决优化问题的首要条件:
@constraint(optimization_problem, c1, 3x + 8y >= 20)
设置解决优化问题的第二个条件:
@constraint(optimization_problem, c2, 6x + 10y <= 100)
解决优化问题:
optimize!(optimization_problem)
输出找到的 x 和 y 的最佳值:
println("Оптимальное значение x: ", value(x))
println("Оптимальное значение y: ", value(y))
输出求解器结果的状态:
status = termination_status(optimization_problem)
println("Статус: ", status)
OPTIMAL**状态意味着求解器找到了问题的全局最优解。
结论¶
在本例中,我们介绍了使用JuMP
和HiGHS
库解决基本优化问题的算法。通过JuMP
库,您可以提出优化问题、设定条件并使用用户定义的求解器求解。您可以在我们的课程优化基础中了解JuMP
库的实际应用。