coiby 发表于 2010-1-10 14:45

请教下大侠们lingo最优解的问题


MODEL:
TITLE 宾馆数目;
SETS:
ROOM/1..32/:price,c,double,x1,x2;
HOTEL/1..10/:chose;
LINKS(HOTEL,ROOM):e;
!HOTEL(ROOM,ROOM)/1,2,3,4 5,6,7,8 9,10,11 12,13 14,15,16 17,18,19,20 21,22,23 24,25,26 27,28,29,30 31,32/;
ENDSETS
DATA:
price=180 220 180 220 140 160 180 200 150 180 150 140 200 140 160 200 160 170 180 220 150 160 300 180 160 180 260 260 280 280 260 280;
c=50 30 30 20 50 35 30 35 50 24 27 50 45 35 35 40 40 40 30 30 50 40 30 40 40 45 30 30 30 30 55 45;
double=1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1;
e=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1;
ENDDATA
MIN=@SUM(HOTEL:chose);
@FOR(LINKS:@BIN(e));
@FOR(ROOM:@GIN(x1);@GIN(x2));
@FOR(ROOM:c>=x1+x2*double);
@SUM(ROOM|price#GT#120 #and# price#LT#160:x1)>=146;
@SUM(ROOM|price#GT#161 #and# price#LT#200:x1)>=85;
@SUM(ROOM|price#GT#201 #and# price#LT#300:x1)>=53;
@SUM(ROOM|price#GT#120 #and# price#LT#160:x2*double*2)>=203;
@SUM(ROOM|price#GT#161 #and# price#LT#200:x2*double*2)>=133;
@SUM(ROOM|price#GT#201 #and# price#LT#300:x2*double*2)>=43;
@FOR(HOTEL(K):chose=@IF(@SUM(ROOM(I):e(K,I)*(x1(I)+double(I)*x2(I)))#GE#1,1,0));
hotelsum=@SUM(HOTEL:chose);
costall=@SUM(ROOM(i):((x1(i)+x2(i)*double(i))*price(i)));
END


为什么这个得到的结果反而比这个还差?


MODEL:
TITLE 宾馆数目;
SETS:
ROOM/1..32/:price,c,double,x1,x2;
HOTEL/1..10/:chose;
LINKS(HOTEL,ROOM):e;
!HOTEL(ROOM,ROOM)/1,2,3,4 5,6,7,8 9,10,11 12,13 14,15,16 17,18,19,20 21,22,23 24,25,26 27,28,29,30 31,32/;
ENDSETS
DATA:
price=180 220 180 220 140 160 180 200 150 180 150 140 200 140 160 200 160 170 180 220 150 160 300 180 160 180 260 260 280 280 260 280;
c=50 30 30 20 50 35 30 35 50 24 27 50 45 35 35 40 40 40 30 30 50 40 30 40 40 45 30 30 30 30 55 45;
double=1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1;
e=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1;
ENDDATA
MIN=@SUM(ROOM(i):((x1(i)+x2(i)*double(i))*price(i)));
@FOR(LINKS:@BIN(e));
@FOR(ROOM:@GIN(x1);@GIN(x2));
@FOR(ROOM:c>=x1+x2*double);
@SUM(ROOM|price#GT#120 #and# price#LT#160:x1)>=146;
@SUM(ROOM|price#GT#161 #and# price#LT#200:x1)>=85;
@SUM(ROOM|price#GT#201 #and# price#LT#300:x1)>=53;
@SUM(ROOM|price#GT#120 #and# price#LT#160:x2*double*2)>=203;
@SUM(ROOM|price#GT#161 #and# price#LT#200:x2*double*2)>=133;
@SUM(ROOM|price#GT#201 #and# price#LT#300:x2*double*2)>=43;
@FOR(HOTEL(K):chose=@IF(@SUM(ROOM(I):e(K,I)*(x1(I)+double(I)*x2(I)))#GE#1,1,0));
hotelsum=@SUM(HOTEL:chose);
costall=@SUM(ROOM(i):((x1(i)+x2(i)*double(i))*price(i)));
END

juneshumo 发表于 2010-1-22 12:31

这个Lingo代码 好长呀…………拷回去看看…………

juneshumo 发表于 2010-1-22 12:33

最好是 把算法思想 顺便写一下,这样方便别人 充分理解代码…………
页: [1]
查看完整版本: 请教下大侠们lingo最优解的问题