求解优化问题的算法
在本例中,我们将考虑使用库求解优化问题的标准算法。 JuMP.
[JuMP.jl](https://github.com/jump-dev/JuMP.jl)是一个开源库。 该库实现了代数建模语言,允许用户使用各种求解器来制定和解决广泛的优化问题。
安装库
如果您的环境中未安装最新版本的软件包 JuMP,取消注释并运行下面的单元格:
In [ ]:
Pkg.add(["JuMP", "HiGHS"])
解决问题的算法
使用以下方法求解优化问题的算法 JuMP 它包括几个系统的步骤,从任务的制定到获得和解释结果。 以下是解决问题的标准算法:
- 连接图书馆
JuMP - 选择和连接求解器库,
- 创建优化任务,
- 变量声明,
- 目标函数的制定,
- 条件的制定,
- 解决问题,
- 结果输出,
- 结果的分析。
任务说明
在这个例子中,我们将找到变量x和y的值,这将导致线性目标函数的最小可能值。:
须符合下列条件:
我们还将定义变量x和y的值的以下边界:
解决问题
连接库 JuMP:
In [ ]:
using JuMP;
在此示例中,我们使用求解器库HiGHS.jl。 连接库 HiGHS:
In [ ]:
using HiGHS;
使用函数创建优化任务 Model() 并在括号中指定求解器的名称。:
In [ ]:
optimization_problem = Model(HiGHS.Optimizer)
Out[0]:
使用宏 @variable 来确定决策变量。 指定变量x和y值的边界:
In [ ]:
@variable(optimization_problem, x >= 1);
@variable(optimization_problem, 0 <= y <= 20);
使用宏设置要优化的目标函数 @objective:
In [ ]:
@objective(optimization_problem, Min, 13x + 22y);
设置使用宏求解优化问题的第一个条件 @constraint:
In [ ]:
@constraint(optimization_problem, c1, 3x + 8y >= 20)
Out[0]:
设置求解优化问题的第二条件:
In [ ]:
@constraint(optimization_problem, c2, 6x + 10y <= 100)
Out[0]:
解决优化问题:
In [ ]:
optimize!(optimization_problem)
打印找到的x和y的最佳值:
In [ ]:
println("Оптимальное значение x: ", value(x))
println("Оптимальное значение y: ", value(y))
显示求解器结果的状态:
In [ ]:
task_status = termination_status(optimization_problem)
println("Статус: ", task_status)
OPTIMAL状态表示求解器已找到问题的全局最优解。
结论
在这个例子中,我们分析了使用库求解基本优化问题的算法。 JuMP 和 HiGHS. 图书馆 JuMP 允许您制定优化问题,设置条件,并使用用户定义的求解器求解。 您可以熟悉库的实际应用。 JuMP 在我们的课程[优化基础](https://engee.com/helpcenter/stable/ru/courses/optimization-course.html )。