数学建模社区-数学中国

标题: 是否该归为非整数规划问题,LINGO中集合的表示 [打印本页]

作者: yangjingsd    时间: 2014-8-28 18:30
标题: 是否该归为非整数规划问题,LINGO中集合的表示
d_1=a_1_1*F_1+ a_1_2*F_2+ a_1_2*F_2+…+ a_1_180*F_180
d_2=a_2_1*F_1+ a_2_2*F_2+ a_2_2*F_2+…+ a_2_180*F_180
d_3=a_3_1*F_1+ a_3_2*F_2+ a_3_2*F_2+…+ a_3_180*F_180
......
d_63=a_63_1*F_1+ a_63_2*F_2+ a_63_2*F_2+…+ a_63_180*F_180

a_i_j都已知为40个大于0的实数
F_i∈{3.4,1.2,4,5,6,7…(略去,有40个大于0的实数,其余为0,共180个数)}
目的,确定F_i的取值,以满足目标函数:min(max(d_i)-min(d_i))

问题:
1)暂时认为,是非线性规划问题打算用LINGO求解;
2)写代码时遇到问题,如何将F_i ∈{…}用LINGO代码表示出来;
3)有更好的求解思路不?

作者: yangjingsd    时间: 2014-8-28 23:54
我自己顶一下哈,免得沉了
作者: yangjingsd    时间: 2014-8-31 00:11
等高人,来看看!
作者: mingtingqing    时间: 2014-10-7 09:55
http://www.docin.com/p-258278866.html  这里是一些基本的lingo编程语句及使用方法,希望能帮助到你
作者: liwenhui    时间: 2017-6-5 16:21
这种情况可以把F的备选值列出来然后构造一个关于F的多项式,令它等于0,这样就限制了F的取值范围,看我下面的举例:

  1. SETS:
  2. ROW/ 1..4/: D;
  3. COL/ 1..5/: F;
  4. MAT( ROW, COL): A;
  5. !注意下面这个集合;
  6. ALT/1..6/: C;
  7. ENDSETS
  8. DATA:
  9. A =
  10. 0.2, 0.3, 0.1, 0.5, 0.6
  11. 0.3, 0.1, 0.6, 0.9, 0.3
  12. 0.6, 0.3, 0.4, 0.9, 0.2
  13. 0.5, 0.7, 0.2, 0.2, 0.1;
  14. !注意这个取值;
  15. C = 3.4, 1.2, 4, 5, 6, 7;
  16. ENDDATA
  17. MIN = @MAX( ROW: D) - @MIN( ROW: D);

  18. @FOR( ROW( I): D( I) = @SUM ( COL( J): A( I, J) * F( J)));

  19. !注意这个约束条件;
  20. @FOR( COL( J): @PROD( ALT( K): C( K)-F( J)) = 0);

  21. CALC:
  22. @SET( 'GLOBAL', 1);
  23. ENDCALC
复制代码
这样解出来就是你想要的结果了。
  1.   Global optimal solution found.
  2.   Objective value:                             0.2000000
  3.   Objective bound:                             0.2000000
  4.   Infeasibilities:                             0.8113830E-11
  5.   Extended solver steps:                              49
  6.   Total solver iterations:                         19394


  7.                        Variable           Value        Reduced Cost
  8.                           D( 1)        6.740000            0.000000
  9.                           D( 2)        6.840000            0.000000
  10.                           D( 3)        6.800000            0.000000
  11.                           D( 4)        6.640000            0.000000
  12.                           F( 1)        1.200000            0.000000
  13.                           F( 2)        6.000000            0.000000
  14.                           F( 3)        5.000000            0.000000
  15.                           F( 4)        1.200000            0.000000
  16.                           F( 5)        6.000000            0.000000
  17.                        A( 1, 1)       0.2000000            0.000000
  18.                        A( 1, 2)       0.3000000            0.000000
  19.                        A( 1, 3)       0.1000000            0.000000
  20.                        A( 1, 4)       0.5000000            0.000000
  21.                        A( 1, 5)       0.6000000            0.000000
  22.                        A( 2, 1)       0.3000000            0.000000
  23.                        A( 2, 2)       0.1000000            0.000000
  24.                        A( 2, 3)       0.6000000            0.000000
  25.                        A( 2, 4)       0.9000000            0.000000
  26.                        A( 2, 5)       0.3000000            0.000000
  27.                        A( 3, 1)       0.6000000            0.000000
  28.                        A( 3, 2)       0.3000000            0.000000
  29.                        A( 3, 3)       0.4000000            0.000000
  30.                        A( 3, 4)       0.9000000            0.000000
  31.                        A( 3, 5)       0.2000000            0.000000
  32.                        A( 4, 1)       0.5000000            0.000000
  33.                        A( 4, 2)       0.7000000            0.000000
  34.                        A( 4, 3)       0.2000000            0.000000
  35.                        A( 4, 4)       0.2000000            0.000000
  36.                        A( 4, 5)       0.1000000            0.000000
  37.                           C( 1)        3.400000            0.000000
  38.                           C( 2)        1.200000            0.000000
  39.                           C( 3)        4.000000            0.000000
  40.                           C( 4)        5.000000            0.000000
  41.                           C( 5)        6.000000            0.000000
  42.                           C( 6)        7.000000            0.000000

  43.                             Row    Slack or Surplus      Dual Price
  44.                               1       0.2000000           -1.000000
  45.                               2        0.000000            0.000000
  46.                               3        0.000000           -1.000000
  47.                               4        0.000000            0.000000
  48.                               5        0.000000            1.000000
  49.                               6        0.000000          -0.3068997E-03
  50.                               7        0.000000          -0.2403846E-01
  51.                               8        0.000000          -0.3289474E-01
  52.                               9        0.000000           0.1074149E-02
  53.                              10        0.000000           0.8012821E-02
复制代码






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5