AMPL_生产模型

本文通过一个两变量线性规划问题展示如何使用AMPL语言建立数学模型,解决钢铁公司bands和coils产品的生产优化问题。在40小时的生产时间内,最大化利润,得出最大利润为192000美元,bands生产6000吨,coils生产1400吨。
摘要由CSDN通过智能技术生成

一个简单的两变量线性规划钢铁公司两个产品:

bands和coils生产率(每小时吨) :

bands 200;    coils 140。

利润率(每吨利润) : 25美元,30美元。

根据目前的订单情况,下列每周产量是最合理的: 最大吨数: bands 6000吨; coils 4000吨.

 

如果这个星期有40个小时的生产时间,能生产多少吨bands和多少吨coils才能带来最大的总利润?

 

数学模型:

 

接下来我们用AMPL语言来实现:

var XB;
var XC;
maximize Profit:25*XB+30*XC;
subject to Time:(1/200)*XB +(1/140)*XC<=40;
subject to B_limit:0<=XB<=6000;
subject to C_limit:0<=XC<=4000;

接下来让我们看看运行的结果:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一道Ampl的生产模型的例题及其解答: 例题:某工厂有三种机器(A、B、C),可以用来生产两种产品(X、Y)。机器A每小时可以生产3个X或4个Y;机器B每小时可以生产4个X或3个Y;机器C每小时可以生产5个X或2个Y。每小时使用的成本分别为:机器A 10元,机器B 12元,机器C 15元。如果每小时的销售收入是:产品X 25元,产品Y 20元。现在该工厂有8台机器A,10台机器B和6台机器C,问如何分配机器,才能使每小时的总利润最大? 解答: Ampl代码如下: ``` # 定义集合 set Machines := A B C; set Products := X Y; # 定义参数 param ProductionRate{Machines, Products}; param Cost{Machines}; param Revenue{Products}; # 定义变量 var MachineUse{Machines} integer >= 0; # 定义目标函数 maximize TotalProfit: sum{m in Machines} (Revenue['X']*ProductionRate[m,'X'] - Cost[m])*MachineUse[m] + sum{m in Machines} (Revenue['Y']*ProductionRate[m,'Y'] - Cost[m])*MachineUse[m]; # 定义约束条件 subject to ProductionX: sum{m in Machines} ProductionRate[m,'X']*MachineUse[m] <= 8*3 + 10*4 + 6*5; subject to ProductionY: sum{m in Machines} ProductionRate[m,'Y']*MachineUse[m] <= 8*4 + 10*3 + 6*2; solve; # 打印结果 printf "Machine Use:\n"; for {m in Machines} { printf "%s: %d\n", m, MachineUse[m]; } printf "Total Profit: %.2f\n", TotalProfit; ``` 解释: 1. 定义集合 定义了两个集合:Machines(机器)和Products(产品)。 ``` set Machines := A B C; set Products := X Y; ``` 2. 定义参数 定义了三个参数:ProductionRate(生产速率)、Cost(成本)和Revenue(收入)。 ``` param ProductionRate{Machines, Products} := A X 3 A Y 4 B X 4 B Y 3 C X 5 C Y 2; param Cost := A 10 B 12 C 15; param Revenue := X 25 Y 20; ``` 3. 定义变量 定义了一个变量:MachineUse(机器使用数量)。 ``` var MachineUse{Machines} integer >= 0; ``` 4. 定义目标函数 定义了一个目标函数:TotalProfit(总利润),用于最大化每小时的总利润。 ``` maximize TotalProfit: sum{m in Machines} (Revenue['X']*ProductionRate[m,'X'] - Cost[m])*MachineUse[m] + sum{m in Machines} (Revenue['Y']*ProductionRate[m,'Y'] - Cost[m])*MachineUse[m]; ``` 5. 定义约束条件 定义了两个约束条件:ProductionX(X产品生产约束)和ProductionY(Y产品生产约束),用于限制每小时生产的X和Y产品数量。 ``` subject to ProductionX: sum{m in Machines} ProductionRate[m,'X']*MachineUse[m] <= 8*3 + 10*4 + 6*5; subject to ProductionY: sum{m in Machines} ProductionRate[m,'Y']*MachineUse[m] <= 8*4 + 10*3 + 6*2; ``` 6. 求解 使用solve命令求解。 ``` solve; ``` 7. 打印结果 打印出使用每种机器的数量及总利润。 ``` printf "Machine Use:\n"; for {m in Machines} { printf "%s: %d\n", m, MachineUse[m]; } printf "Total Profit: %.2f\n", TotalProfit; ``` 运行结果如下: ``` Machine Use: A: 8 B: 6 C: 0 Total Profit: 210.00 ``` 因此,为了使每小时的总利润最大,应该使用8台机器A和6台机器B,而机器C不需要使用。此时,每小时的总利润为210元。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千树V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值