使用Julia进行线性优化

编写您的第一个Julia代码以解决线性优化问题。

在本文中,我们将重点介绍使用Julia建模线性优化问题。

要了解有关Julia的更多信息,请在此处找到链接。
要了解有关线性优化的更多信息,请在此处找到链接。

Julia有一个名为JuMP的软件包,用于对优化问题进行建模。
JuMP是一种领域特定的建模语言,可以用于线性,混合整数,非线性问题。

JuMP在内部使用MathProgBase。 MathProgBase提供了独立于求解器的高级功能,可用于与许多求解器(如Cbc,Clp,CPLEX,Gurobi等)进行交互。在本示例中,我们将使用Cbc作为求解器。 Cbc是一个开放源代码数学求解器,它支持线性以及混合整数问题。

1.建立模型

using JuMP
using Cbc
lpModel = Model(solver = CbcSolver(seconds = 3600))

在使用JuMP创建模型之前,请确保已安装JuMP和Cbc。

Pkg.add(“JuMP”)
Pkg.add("Cbc")

2.定义变量

 @variable (lpModel, x <= 5)
@variable (lpModel, y >= 6)

我们正在创建两个具有预定义范围的变量,即x和y。

3.创建约束

 @constraint (lpModel, x+y <= 20)
@constraint (lpModel, 2x + 3y >= 28)

4.创建一个目标

 @objective (lpModel, Max, x + y)

5.解决并阅读答案

status = JuMP.solve(lpModel)

getvalue(x)
getvalue(y)

让我们举个例子。

一次,由18名学生组成的小组进入了新开设的咖啡馆。 咖啡馆只有两个项目,菜单卡就是这样。

1.茶20印度卢比
2.咖啡IN R30

在18名学生中,有5名学生要求喝茶,而6名学生则说要喝咖啡。 剩下的7种饮料都可以。
此外,他们不想花费超过470印度卢比。 这使酒店经理感到困惑。 他过去通常会从茶叶获得2印度卢比的利润,从咖啡获得3印度卢比的利润。 他想使利润最大化,但不确定如何做到这一点。 让我们尝试帮助他。

假设,x是要喝茶的学生人数,y是要喝咖啡的学生人数。

他们中至少有5个人想要喝茶。

x> = 5
同样,y> = 6

我们知道,总共有18个学生,因此x + y = 18。
总费用不能超过470,因此

20x + 30y <= 470

目标是使利润最大化,这意味着

最大化利润,用2x + 3y表示,因为每杯茶将产生2印度卢比的利润,每杯咖啡将产生3印度卢比的利润。


using JuMP
using Cbc
lpModel = Model(solver = CbcSolver(seconds = 3600))
 @variable (lpModel, x >= 5)
@variable (lpModel, y >= 6)
 @constraint (lpModel, x+y == 18)
@constraint (lpModel, 20x + 30y <= 470)
 @objective (lpModel, Max, 2x + 3y)
status = JuMP.solve(lpModel)
println("Number of Tea Cups: $(getvalue(x))")
println("Number of Coffee Mugs : $(getvalue(y))")

以上代码应输出

Number of Tea cups: 7.0
Number of Coffee Mugs : 11.0

这意味着最大利润应该是

2 * 7 + 3 * 11 = INR 47

现在,让这个问题变得更加有趣。 假设总预算是475卢比,而不是总预算470卢比。

因此,我们需要修改约束之一。

@ constraint (lpModel, 20x + 30y <= 475)

这很容易。 让我们在修改后的约束条件下运行整个代码,看看输出是什么。

Number of Tea Cups: 6.5
Number of Coffee Mugs : 11.5

什么地方出了错? 因为,为某人提供半杯茶和半杯咖啡是没有意义的,对吧? 我们需要确保'x'和'y'是离散的整数变量而不是连续的,让我们将变量声明更改为

 @variable (lpModel, x >= 5, Int)
@variable (lpModel, y >= 6, Int)

这也将导致与先前相同的输出。

Number of Tea Cups: 7.0
Number of Coffee Mugs : 11.0

谢谢阅读。 非常感谢您的反馈。

From: https://hackernoon.com/linear-optimization-using-julia-40311c0ad98c

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值