lingo基础入门Day 4——lingo背包问题求解与归纳总结

lingo基础入门Day 4

lingo的背包问题的一般描述

  • 背包问题可描述为:给定n个物品,每件物品重量价值以及背包最大载重已知的情况下,如果进行选择才能使背包的物品总价值最高
  • 对于决策者,如果每件货物只有装或者不装两种选择,而不能拆开装一部分,那么这样的背包问题就是一个0-1的背包问题(0-1 Knapsack Problem)。
  • 只考虑重量约束的是一维背包约束,还要考虑容积约束的就是二维背包问题。
  • 但现实中考虑容积需要考虑长宽高,实际为三维背包问题。
  • 一维二维都是对部分问题的合理简化。

背包问题实例即数学模型

有10件货物从甲到乙

物品12345678910
重量6345123542
利润54020018035060150280450320120
xx1x2x3x4x5x6x7x8x9x10

只有一辆最大载重30T货车运送货物,只能选择部分货物运送。

运送哪些,使得总利润最大。(0-1背包问题)

用lingo建立模型并求解

  • 定义集合
  • 给常量赋值
  • 目标函数的表达
  • 约束条件的表达
  • 模型求解
定义集合

ITEM/1 2 3 4 5 6 7 8 9 10/; (显式罗列)

ITEM/1…10/;(隐式罗列)

定义向量

向量与集合一起定义,在lingo中被称为集合的属性(Attribute)。

ITEM/1 2 3 4 5 6 7 8 9 10/: WEIGHT,PROFIT, X;(下表都是按/…/中的数据)

给常量赋值
DATA:



WEIGHT = 6  3  4  5  1 2 3 5 4 2 ;

PROFIT = 540  200  180  350  60  150  280  450  320  120;



ENDDATA

赋值了就是常量,没赋值就是变量

目标函数的表达

实现装在货物利润最大化

MAX = @SUM(ITEM(I):PROFIT(I)*x(I));//依次把对应变量相乘并相加
最大载重量的约束
@SUM(ITEM(I)): WEIGHT(I)*X(I))<=30;//计算该货物的重量以及总合小于等于30吨
变量取值范围的约束

xi只能0-1变量

@FOR(ITEM(I):@BIN(X(I)));//产生了I个0-1变量
完整模型
!Name: 背包问题模型
!Date: 2022-03-16
!Desc: 10件货物的背包问题
;

MODEL:

SETS:

ITEM/1 2 3 4 5 6 7 8 9 10/:WEIGHT, PROFIT,X;

ENDSETS

DATA:

WEIGHT = 6 3 4 5 1 2 3 5 4 2
PROFIT = 540  200  180  350  60  150  280  450  320  120;

ENDDATA

MAX = @SUM(ITEM(I):PROFIT(I)*x(I));

@SUM(ITEM(I)): WEIGHT(I)*X(I))<=30;
@FOR(ITEM(I):@BIN(X(I)));

END

运算结果:

  Global optimal solution found.
  Objective value:                              2410.000
  Objective bound:                              2410.000
  Infeasibilities:                              0.000000
  Extended solver steps:                               0
  Total solver iterations:                             0
  Elapsed runtime seconds:                          0.19

  Model Class:                                      PILP

  Total variables:                     10
  Nonlinear variables:                  0
  Integer variables:                   10

  Total constraints:                    2
  Nonlinear constraints:                0

  Total nonzeros:                      20
  Nonlinear nonzeros:                   0



                                Variable           Value        Reduced Cost
                              WEIGHT( 1)        6.000000            0.000000
                              WEIGHT( 2)        3.000000            0.000000
                              WEIGHT( 3)        4.000000            0.000000
                              WEIGHT( 4)        5.000000            0.000000
                              WEIGHT( 5)        1.000000            0.000000
                              WEIGHT( 6)        2.000000            0.000000
                              WEIGHT( 7)        3.000000            0.000000
                              WEIGHT( 8)        5.000000            0.000000
                              WEIGHT( 9)        4.000000            0.000000
                             WEIGHT( 10)        2.000000            0.000000
                              PROFIT( 1)        540.0000            0.000000
                              PROFIT( 2)        200.0000            0.000000
                              PROFIT( 3)        180.0000            0.000000
                              PROFIT( 4)        350.0000            0.000000
                              PROFIT( 5)        60.00000            0.000000
                              PROFIT( 6)        150.0000            0.000000
                              PROFIT( 7)        280.0000            0.000000
                              PROFIT( 8)        450.0000            0.000000
                              PROFIT( 9)        320.0000            0.000000
                             PROFIT( 10)        120.0000            0.000000
                                   X( 1)        1.000000           -540.0000
                                   X( 2)        1.000000           -200.0000
                                   X( 3)        0.000000           -180.0000
                                   X( 4)        1.000000           -350.0000
                                   X( 5)        0.000000           -60.00000
                                   X( 6)        1.000000           -150.0000
                                   X( 7)        1.000000           -280.0000
                                   X( 8)        1.000000           -450.0000
                                   X( 9)        1.000000           -320.0000
                                  X( 10)        1.000000           -120.0000

                                     Row    Slack or Surplus      Dual Price
                                       1        2410.000            1.000000
                                       2        0.000000            0.000000


模型求解
物品12345678910
重量6345123542
利润54020018035060150280450320120
x1101011111

总利润=2410元

实际所装货物总量=30吨

总结

背包问题实例如果定义原始集合、给常量赋值、目标函数的表达约束条件的表达模型求解,整体解决了一个0-1规划问题并算出来了总利润。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值