lingo基础入门Day 10

lingo基础入门Day 10

文章目录

  • lingo基础入门Day 10
      • lingo模型的计算段应用实例
      • 消防站选址问题:
      • 目标函数
      • 约束条件
      • 数据转化
      • lingo建模:
      • 总结

lingo模型的计算段应用实例

消防站选址问题:

  • 一个城市的8个区,每个区最多建一个消防站

  • 基本要求:必须保证在任何一个区发生火警的时候,能够在10分钟内有消防车赶到现场。

  • 在此基础是,为节省开支,设置的消防站数量越少越好。

  • 假定各区域的消防站都建在每个区的中心,各个区域之间的消防车行驶的最长时间如表所示。

  • 1 2 3 4 5 6 7 8
    1 7 12 18 20 24 26 25 28
    2 14 5 8 15 16 18 18 18
    3 19 9 4 14 10 22 16 13
    4 14 15 15 10 18 15 14 18
    5 20 18 12 20 9 25 14 12
    6 18 21 20 16 20 6 10 15
    7 22 18 20 15 16 15 5 9
    8 30 22 15 20 14 18 8 6

    应该在哪几个区设计消防站?

目标函数

目标:消防站总数量最小化

约束条件

约束条件:任何一个小区发生火警,至少有一个消防站派出的消防车能够在10分钟之内赶到该小区。

数据转化

各区域消防车能在10min能否到达,能到达就是1,否则就是0

1 2 3 4 5 6 7 8
1 1 0 0 0 0 0 0 0
2 0 1 1 0 0 0 0 0
3 0 1 0 0 1 0 0 0
4 0 0 0 1 0 0 0 0
5 0 0 0 0 0 0 0 0
6 0 0 0 0 1 1 1 0
7 0 0 0 0 0 0 1 1
8 0 0 0 0 0 0 1 1

lingo建模:

MODEL:
TITLE FireStation;

SETS:
	S/1..8/:X;
	E(S,S):DIST,REACH;
ENDSETS

DATA:

DIST = 
7 12 18 20 24 26 25 28
14 5 8 15 16 18 18 18
19 9 4 14 10 22 16 13
14 15 15 10 18 15 14 18
20 18 12 20 9 25 14 12
18 21 20 16 20 6 10 15
22 18 20 15 16 15 5 9
30 22 15 20 14 18 8 6;

ENDDATA

CALC:

@FOR(S(I):
	@FOR(S(J):
	REACH(I,J)
	=@IF(DIST(I,J) #LE# 10,1,0)
	)
);
ENDCAIC

MIN = @SUM(S:X);
@FOR(S:@BIN(X));

@FOR(S(J): @SUM(S(I):X(I)*REACH(I,J))>=1);

END

总结

本小节主要讲了lingo为进行优化之前对原始数据计算提供了方便。如果你熟悉其他的语言也可以用其编程实现原始数据的计算或者转换,但lingo对于这种机制也能实现对应的功能,特别对只熟悉lingo的人很方便。

你可能感兴趣的:(lingo入门,算法,lingo,回归,建模,考研)