lingo基础入门Day 7——lingo应用之运输问题与生产问题总结

lingo基础入门Day 7

lingo应用:运输问题

糖果公司有三个加工厂,每天生产糖果7 、 4 、9吨,该公司要把糖果分别运送到四个地区的门市部,B1、B2、B3、B4销售,每天的销售量分别是3吨、4吨、5吨、6吨,现在已知从每个加工厂Ai到各个销售门市部运价如下图所示,怎样运送总运费最少?

部门B1部门B2部门B3部门B4产量
工厂A13113107
工厂A219284
工厂A3741059
销量3656
  • 用ai表示第i个加工厂产量

  • 用bj表示第j个部门的销量

  • 用cij表示运价即从第i个工厂到第j个部门运送一吨糖果的运输价格

  • 设置决策变量xij,为从第i个加工厂调动给第j个部门的糖果数量

  • 部门B1部门B2部门B3部门B4产量
    工厂A1X11X12X13X147
    工厂A2X21X22X23X244
    工厂A3X31X32X33X349
    销量3656
  • !建立加工厂集合及产量
    FACTORY/1..3/:A
    !建立部门集合及销量:
    SHOP/1..4/:B
    !建立联系集合及运价和运量:
    LINK(FACTORY,SHOP):C,X;
    
给常量赋值:
DATA:

A = 7 4 9;
B = 3 6 5 6;
C = 
3 11 3 10
1 9  2 8
7 4  10 5;

ENDDATA
建立目标函数:运费最少
 MIN = @SUM(LINK(I,J):C(I,J)*X(I,J));
 MIN = @SUM(LINK:C*X);
产量约束:
	@for(FACTORY(I):
		@SUM(SHOP(J):X(I,J)=A(I)
	);
	
销量约束:
	@for(SHOP(J):
		@SUM(FACTORY(I):X(I,J)=B(J)
	);
	
完整模型:
model:

sets:	
	FACTORY/1..3/:A;
	SHOP/1..4/:B;
	LINK(FACTORY,SHOP):C,X;	
endsets

DATA:
A = 7 4 9;
B = 3 6 5 6;
C = 
3 11 3 10
1 9  2 8
7 4  10 5;
ENDDATA

 MIN = @SUM(LINK:C*X);
 @for(FACTORY(I):
 		@SUM(SHOP(J):X(I,J))=A(I)
	);
 @for(SHOP(J):
		@SUM(FACTORY(I):X(I,J))=B(J)
	);
end
显示结果:
  Global optimal solution found.
  Objective value:                              85.00000
  Infeasibilities:                              0.000000
  Total solver iterations:                             6
  Elapsed runtime seconds:                          0.07

  Model Class:                                        LP

  Total variables:                     12
  Nonlinear variables:                  0
  Integer variables:                    0

  Total constraints:                    8
  Nonlinear constraints:                0

  Total nonzeros:                      36
  Nonlinear nonzeros:                   0

                                Variable           Value        Reduced Cost
                                   A( 1)        7.000000            0.000000
                                   A( 2)        4.000000            0.000000
                                   A( 3)        9.000000            0.000000
                                   B( 1)        3.000000            0.000000
                                   B( 2)        6.000000            0.000000
                                   B( 3)        5.000000            0.000000
                                   B( 4)        6.000000            0.000000
                                C( 1, 1)        3.000000            0.000000
                                C( 1, 2)        11.00000            0.000000
                                C( 1, 3)        3.000000            0.000000
                                C( 1, 4)        10.00000            0.000000
                                C( 2, 1)        1.000000            0.000000
                                C( 2, 2)        9.000000            0.000000
                                C( 2, 3)        2.000000            0.000000
                                C( 2, 4)        8.000000            0.000000
                                C( 3, 1)        7.000000            0.000000
                                C( 3, 2)        4.000000            0.000000
                                C( 3, 3)        10.00000            0.000000
                                C( 3, 4)        5.000000            0.000000
                                X( 1, 1)        2.000000            0.000000
                                X( 1, 2)        0.000000            2.000000
                                X( 1, 3)        5.000000            0.000000
                                X( 1, 4)        0.000000            0.000000
                                X( 2, 1)        1.000000            0.000000
                                X( 2, 2)        0.000000            2.000000
                                X( 2, 3)        0.000000            1.000000
                                X( 2, 4)        3.000000            0.000000
                                X( 3, 1)        0.000000            9.000000
                                X( 3, 2)        6.000000            0.000000
                                X( 3, 3)        0.000000            12.00000
                                X( 3, 4)        3.000000            0.000000
         

派生集合的构造方法:

格式:
派生集合的名字(父集合1,父集合2,...,父集合n)[/元素列表/][:属性列表];

举例:

 FACTORY/A1...A3/;
 SHOP/B1..B3/;
 LINK( FACTORY,SHOP);

指派问题

有n项任务要分配给n个人去做,每人只完成一项任务,每个人物也只有一个人完成。

已知第i个人完成第j项任务所需的时间为Cij(称为效率矩阵)

问如何分配任务使完成所有工作所用的总时间最少?

任务A任务B任务C任务D任务E
人员18610912
人员212107159
人员374356
人员4954128
人员54116715

指派问题建模与求解

引入决策变量xij,如果由第i个人来完成第j项任务,则xij=1,否则xij=0.

  • 建立人员集合
  • 建立任务集合
  • 建立联系集合(人员、任务)
  • 在联系集合上定于效用矩阵c和决策变量矩阵X
  • 目标函数:总费用最小
  • 约束1:每个人只完成一件任务
  • 约束2:每个任务只有一个人完成
  • 约束3:矩阵X的每个元素都是0-1变量
建模代码如下:
model:

sets:
	TASK/A B C D E/;
	WORKER/1..5/;
	LINK(WORKER,TASK):C,X;
endsets

DATA:

C =
8 6 10 9 12
12 10 7 15 9
7 4 3 5 6
9 5 4 12 8
4 11 6 7 15;
ENDDATA

MIN=@SUM(LINK: C*X);

@FOR(WORKER(I):
	@SUM(TASK(J):X(I,J))=1
);	
@FOR(TASK(J):
	@SUM(WORKER(I):X(I,J))=1
);	
@FOR(LINK:@BIN(X)
);	
end

实现结果:

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

                                Variable           Value        Reduced Cost
                                X( 1, A)        0.000000            8.000000
                                X( 1, B)        1.000000            6.000000
                                X( 1, C)        0.000000            10.00000
                                X( 1, D)        0.000000            9.000000
                                X( 1, E)        0.000000            12.00000
                                X( 2, A)        0.000000            12.00000
                                X( 2, B)        0.000000            10.00000
                                X( 2, C)        0.000000            7.000000
                                X( 2, D)        0.000000            15.00000
                                X( 2, E)        1.000000            9.000000
                                X( 3, A)        0.000000            7.000000
                                X( 3, B)        0.000000            4.000000
                                X( 3, C)        0.000000            3.000000
                                X( 3, D)        1.000000            5.000000
                                X( 3, E)        0.000000            6.000000
                                X( 4, A)        0.000000            9.000000
                                X( 4, B)        0.000000            5.000000
                                X( 4, C)        1.000000            4.000000
                                X( 4, D)        0.000000            12.00000
                                X( 4, E)        0.000000            8.000000
                                X( 5, A)        1.000000            4.000000
                                X( 5, B)        0.000000            11.00000
                                X( 5, C)        0.000000            6.000000
                                X( 5, D)        0.000000            7.000000
                                X( 5, E)        0.000000            15.00000


生产计划的建模与求解

某企业计划生产甲乙两种产品,两种产品都要在ABCD四种不同的设备上加工,生产每种产品在各个设备上的加工时间、各设备的总生产能力和每种产品的单位丽人如右表所示:

产品甲产品乙生产力
设备A2212
设备B128
设备C4016
设备D0412
单位利润(元/件)23
企业如何安排生产才能总利润最大?
  • 定义设备集合及设备能力属性
  • 定义产品结合及单位产品利润、产量属性
  • 定义每种产品在每个设备上的加工时间集合以及属性加工时间
EQUIPMENT/A..D/:CAPACITY;
PROUDCT/P,Q/:PRICE,X;
WORKHOUR(PRODUCT,EQUIPMENT):T;
目标函数:利润最大

约束条件:每个设备对各个产品的加工时间不能超过能力

MAX = @SUM(PRODUCT:X*PRICE);
@FOR (EQUIPMENT(J):
	@SUM(PRODUCT(I):X(I)*T(I,J))<=CAPACITY(J)
);
模型总体实现:
model:

sets:
	EQUIPMENT/A..D/:CAPACITY;
	PRODUCT/P,Q/:PRICE,X;
	WORKHOUR(PRODUCT,EQUIPMENT):T;
endsets

data:
PRICE = 2 3;
CAPACITY = 12 8 16 12;
T = 2 1 4 0
    2 2 0 4;
ENDDATA

MAX = @SUM(PRODUCT:X*PRICE);

@FOR (EQUIPMENT(J):
	@SUM(PRODUCT(I):X(I)*T(I,J))<=CAPACITY(J)
);

end
模型结果:
  Global optimal solution found.
  Objective value:                              14.00000
  Infeasibilities:                              0.000000
  Total solver iterations:                             1
  Elapsed runtime seconds:                          0.07

  Model Class:                                        LP

  Total variables:                      2
  Nonlinear variables:                  0
  Integer variables:                    0

  Total constraints:                    5
  Nonlinear constraints:                0

  Total nonzeros:                       8
  Nonlinear nonzeros:                   0



                                Variable           Value        Reduced Cost
                            CAPACITY( A)        12.00000            0.000000
                            CAPACITY( B)        8.000000            0.000000
                            CAPACITY( C)        16.00000            0.000000
                            CAPACITY( D)        12.00000            0.000000
                               PRICE( P)        2.000000            0.000000
                               PRICE( Q)        3.000000            0.000000
                                   X( P)        4.000000            0.000000
                                   X( Q)        2.000000            0.000000
                                T( P, A)        2.000000            0.000000
                                T( P, B)        1.000000            0.000000
                                T( P, C)        4.000000            0.000000
                                T( P, D)        0.000000            0.000000
                                T( Q, A)        2.000000            0.000000
                                T( Q, B)        2.000000            0.000000
                                T( Q, C)        0.000000            0.000000
                                T( Q, D)        4.000000            0.000000

                                     Row    Slack or Surplus      Dual Price
                                       1        14.00000            1.000000
                                       2        0.000000            0.000000
                                       3        0.000000            1.500000
                                       4        0.000000           0.1250000
                                       5        4.000000            0.000000


总结

本小节主要讲了lingo定义派生集合的构造方法,以及给矩阵常量赋值的方法,还有通过举例来实现有关集合遍历函数的嵌套使用的方法,需要重点掌握。

  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值