Bootstrap

lingo基础入门Day 1——lingo建模与线性规划、最优解总结

lingo基础入门Day 1

lingo的主要功能与特色

  • 能求解线性规划问题,也能求解非线性规划问题
  • lingo内置建模语言可以简练直观描述较大的优化模型
  • 将集合概念引入建模语言,能很容易的把实际问题转换成LINGO模型
  • 运行速度快,计算能力强
  • 能方便的与Excel,数据库等其他软件交换数据。

用LINGO建模

简单模型:生产计划问题
  • 简单的模型仅仅由目标函数和约束条件组成
  • 目标函数中不用写Z
  • 乘号(*)不能省略
  • 变量的非负约束是默认约束
  • 目标函数与约束条件顺序要求

基本代码举例如下:

MAX= 2*X1+3*x2;

2*X1+2*X2<=12;
X1+2*X2<=8;
4*X1<=16;
4*X2<=12;

求解结果:

  Global optimal solution found.
  Objective value:                              14.00000
  Infeasibilities:                              0.000000
  Total solver iterations:                             1


                       Variable           Value        Reduced Cost
                             X1        4.000000            0.000000
                             X2        2.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


基于集合的专业模型
!COMMENTS;
MODEL:

	SETS:
	//集合段
	ENDSETS
	
	DATA:
	//数据段
	ENDDATA
	//约束段
END

专业模型一般三部分组成

  • 集合定义
  • 数据定义
  • 目标函数与约束条件定义
线性规划模式的三种形式:

一般形式

向量形式

模型矩阵形式

简单模型与专业模型的比较:

简单模型只适合与很小的问题的建模和求解

专业模型适合于规模较大,比较复杂的问题建模和求解

在建模语言中引入集合,使得LINGO能够使用非常简洁的语句描述数学模型,及时变量和约束的数量增大,目标函数和约束条件的语句却无需改变,只需要改变集合和数据的定义。

集合的表示和运用是LINGO建模语言的重点和精华,需要重点掌握。

! Name : PLAN1.txt
! Date : 2022-03-14
! Desc : 
;

MODEL:

SETS:

product/p,q/:price,x;
equipment/a,b,c,d/:capacity;
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


                       Variable           Value        Reduced Cost
                      PRICE( P)        2.000000            0.000000
                      PRICE( Q)        3.000000            0.000000
                          X( P)        4.000000            0.000000
                          X( Q)        2.000000            0.000000
                   CAPACITY( A)        12.00000            0.000000
                   CAPACITY( B)        8.000000            0.000000
                   CAPACITY( C)        16.00000            0.000000
                   CAPACITY( D)        12.00000            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的计算结果的术语

Globa optimal solution:全局最优解

Objective value: 目标函数值

Infeasibilities: 不可行性,未满足的约束条件总数

Total solver iterations: 迭代次数

Variable :变量

Reduced Cost: 各个变量的检验数

Slack or Surplus:松弛或剩余

Dual Price: 对偶价格

类型练习举例:

约束如下:

MIN = -3*X1+X2+X3;

X1-2*X2+X3<=11;
-4*X1+X2+2*X3>=3;
-2*X1+X3=1;

运算结果:

  Global optimal solution found.
  Objective value:                             -2.000000
  Infeasibilities:                              0.000000
  Total solver iterations:                             0


                       Variable           Value        Reduced Cost
                             X1        4.000000            0.000000
                             X2        1.000000            0.000000
                             X3        9.000000            0.000000

                            Row    Slack or Surplus      Dual Price
                              1       -2.000000           -1.000000
                              2        0.000000           0.3333333
                              3        0.000000          -0.3333333
                              4        0.000000          -0.6666667

约束如下:

max = 3*x1+2*x2+5*x3;

x1+2*x2+x3+x4=430;
3*x1+2*x3+x5=460;
x1+4*x2+x6=420;

运算结果:

  Global optimal solution found.
  Objective value:                              1350.000
  Infeasibilities:                              0.000000
  Total solver iterations:                             2


                       Variable           Value        Reduced Cost
                             X1        0.000000            4.000000
                             X2        100.0000            0.000000
                             X3        230.0000            0.000000
                             X4        0.000000            1.000000
                             X5        0.000000            2.000000
                             X6        20.00000            0.000000

                            Row    Slack or Surplus      Dual Price
                              1        1350.000            1.000000
                              2        0.000000            1.000000
                              3        0.000000            2.000000
                              4        0.000000            0.000000


多重最优解

对于多种最优解的线性规划模型,LINGO能找出其中的一个解,并且没有其他提示。

用单纯形表计算线性规划问题,判定多重最优解的方法是:如果在最优表中所有的基变量的取值都大于0,那么该线性规划模型具有多重最优解。

初始条件:

min = x1-x2;

-x1+x2<=2;
2*x1+x2<=2;

多重最优解:

  Global optimal solution found.
  Objective value:                             -2.000000
  Infeasibilities:                              0.000000
  Total solver iterations:                             1


                       Variable           Value        Reduced Cost
                             X1        0.000000            3.000000
                             X2        2.000000            0.000000

                            Row    Slack or Surplus      Dual Price
                              1       -2.000000           -1.000000
                              2        0.000000            0.000000
                              3        0.000000            1.000000

//x1>1
  Global optimal solution found.
  Objective value:                              1.000000
  Infeasibilities:                              0.000000
  Total solver iterations:                             0


                       Variable           Value        Reduced Cost
                             X1        1.000000            0.000000
                             X2        0.000000            0.000000

                            Row    Slack or Surplus      Dual Price
                              1        1.000000           -1.000000
                              2        3.000000            0.000000
                              3        0.000000            1.000000
                              4        0.000000           -3.000000

退化解

如果在单纯形表中基变量的取值为0,则称该可行解是退化的。

举例条件:

min = -2*x1+x2-x3+2*x4-x5;

2*x1+x3+x5<=20;
x1+x2+2*x5=10;
x1+x4+3*x5=30;

求解

  Global optimal solution found.
  Objective value:                              10.00000
  Infeasibilities:                              0.000000
  Total solver iterations:                             2


                       Variable           Value        Reduced Cost
                             X1        0.000000            1.000000
                             X2        0.000000            4.000000
                             X3        15.00000            0.000000
                             X4        15.00000            0.000000
                             X5        5.000000            0.000000

                            Row    Slack or Surplus      Dual Price
                              1        10.00000           -1.000000
                              2        0.000000            1.000000
                              3        0.000000            3.000000
                              4        0.000000           -2.000000


无界解

遇到线性规划问题是无界解的情况LINGO能欧自动发现并给出提示:

UNbound solution

举例:

max = x1+2*x2;

2*x1-x2<=4;
x1<=2;

结果:

  Model is unbounded


                       Variable           Value        Reduced Cost
                             X1        2.000000            0.000000
                             X2        0.000000           -2.000000

                            Row    Slack or Surplus      Dual Price
                              1      -0.1000000E+31        1.000000
                              2        0.000000            0.000000
                              3        0.000000            1.000000
无可行解

遇到线性规划问题是无可形解的情况,lingo也能发现并给出提示:

No feasible solution.

举例:

max = 2*x1+3*x2;

2*x1+2*x2<=12;
x1+2*x2>=14;

运行结果:

  No feasible solution found.
  Infeasibilities:                              2.000000
  Total solver iterations:                             1


                       Variable           Value        Reduced Cost
                             X1        0.000000            1.000000
                             X2        6.000000            0.000000

                            Row    Slack or Surplus      Dual Price
                              1        2.000000            1.000000
                              2        0.000000            1.500000
                              3       -2.000000            0.000000

总结

lingo是专门用于求解数学规划的专业软件

用LINGO可以建立两种数学模型

集合的表示和运用是LINGO建模语言的重点和精华,也是建立专业模型的基础,应该努力掌握并且灵活运用。

用lingo求解线性规划能发现无界解,无可行解的情况,但对于多重最优解只能求解出其中的一个解,而且不能给出此问题为多重最优解的提示。

;