找回密码
 欢迎注册
楼主: czboyu

[求助] 求如何切割浪费最少

[复制链接]
发表于 2023-5-29 10:40:42 | 显示全部楼层
  1. MODEL:
  2. TITLE 钢管下料问题;

  3. SETS:
  4. !GENSHU(I)表示选取第I种方式时选取的根数;
  5. !总共有19种方式,每种方式的根数;
  6. FANGSHI/1..19/:GENSHU;
  7. !需求根数;
  8. GGCD/1..5/:XUQIU;
  9. !C(I,J)表示按照第I种方式切割时能获得的第J种钢管的数量;
  10. XISHU(FANGSHI,GGCD):C;
  11. ENDSETS

  12. DATA:
  13. !每种钢管至少需要的数量;
  14. XUQIU=100,38,32,80,80;
  15. C=
  16. 0 0 0 0 4
  17. 0 0 0 1 2
  18. 0 0 0 2 1
  19. 0 0 0 3 0
  20. 0 0 1 0 2
  21. 0 0 1 1 1
  22. 0 0 1 2 0
  23. 0 0 2 0 1
  24. 0 0 2 1 0
  25. 0 1 0 0 2
  26. 0 1 0 1 1
  27. 0 1 0 2 0
  28. 0 1 1 0 1
  29. 0 2 0 0 0
  30. 1 0 0 0 2
  31. 1 0 0 1 1
  32. 1 0 1 0 0
  33. 1 1 0 0 0
  34. 2 0 0 0 0
  35. ;
  36. ENDDATA

  37. !每种钢管都要大于等于需求量;
  38. @FOR(GGCD(J):@SUM(FANGSHI(I):C(I,J)*GENSHU(I))>=XUQIU(J));
  39. !每种方式的根数都要求是整数;
  40. @FOR(FANGSHI(I):@GIN(GENSHU(I)));

  41. !求根数和的最小值;
  42. MIN=@SUM(FANGSHI(I):GENSHU(I));
  43. END
复制代码


继续简化后的代码,求解结果不变!

点评

nyy
论坛没代码的语法高亮,贴出来的代码太丑了!  发表于 2023-5-30 11:47
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2023-5-29 10:58:21 | 显示全部楼层
nyy 发表于 2023-5-29 10:29
我算出来是118根,你算出来是119根,我把切割方案拿出来了。
确实满足要求且还比你算出来的小,所以你的 ...

随机算法算的,近优解,不是最优解。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2023-5-29 11:09:42 | 显示全部楼层
aimisiyou 发表于 2023-5-29 10:58
随机算法算的,近优解,不是最优解。

你怎么随机的??????
我是先穷举出所有的切割模式的可能,然后再最优化解决问题!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2023-5-29 16:06:49 | 显示全部楼层
https://github.com/vim-scripts/lingo.vim--Cataldo
https://github.com/huangyxi/lingo.vim

lingo自身的语法高亮太差了,不得不弄vim的语法高亮,下载这个文件,比他自身的强太多了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2023-5-30 11:51:17 | 显示全部楼层
nyy 发表于 2023-5-29 10:40
继续简化后的代码,求解结果不变!

求解结果:
居然迭代10次就能得到结果!

  1.   Global optimal solution found.
  2.   Objective value:                       118.00000000000
  3.   Objective bound:                       118.00000000000
  4.   Infeasibilities:                       0.0000000000000
  5.   Extended solver steps:                               0
  6.   Total solver iterations:                            10
  7.   Elapsed runtime seconds:                          0.14

  8.   Model Class:                                      PILP

  9.   Total variables:                     19
  10.   Nonlinear variables:                  0
  11.   Integer variables:                   19

  12.   Total constraints:                    6
  13.   Nonlinear constraints:                0

  14.   Total nonzeros:                      57
  15.   Nonlinear nonzeros:                   0



  16.   Model Title: 钢管下料问题

  17.                   Variable                  Value               Reduced Cost
  18.                 GENSHU( 1)        0.0000000000000            1.0000000000000
  19.                 GENSHU( 2)        0.0000000000000            1.0000000000000
  20.                 GENSHU( 3)        0.0000000000000            1.0000000000000
  21.                 GENSHU( 4)        0.0000000000000            1.0000000000000
  22.                 GENSHU( 5)        0.0000000000000            1.0000000000000
  23.                 GENSHU( 6)        0.0000000000000            1.0000000000000
  24.                 GENSHU( 7)        0.0000000000000            1.0000000000000
  25.                 GENSHU( 8)        0.0000000000000            1.0000000000000
  26.                 GENSHU( 9)        3.0000000000000            1.0000000000000
  27.                GENSHU( 10)        0.0000000000000            1.0000000000000
  28.                GENSHU( 11)        0.0000000000000            1.0000000000000
  29.                GENSHU( 12)        12.000000000000            1.0000000000000
  30.                GENSHU( 13)        26.000000000000            1.0000000000000
  31.                GENSHU( 14)        0.0000000000000            1.0000000000000
  32.                GENSHU( 15)        0.0000000000000            1.0000000000000
  33.                GENSHU( 16)        54.000000000000            1.0000000000000
  34.                GENSHU( 17)        0.0000000000000            1.0000000000000
  35.                GENSHU( 18)        0.0000000000000            1.0000000000000
  36.                GENSHU( 19)        23.000000000000            1.0000000000000
  37.                  XUQIU( 1)        100.00000000000            0.0000000000000
  38.                  XUQIU( 2)        38.000000000000            0.0000000000000
  39.                  XUQIU( 3)        32.000000000000            0.0000000000000
  40.                  XUQIU( 4)        80.000000000000            0.0000000000000
  41.                  XUQIU( 5)        80.000000000000            0.0000000000000
  42.                   C( 1, 1)        0.0000000000000            0.0000000000000
  43.                   C( 1, 2)        0.0000000000000            0.0000000000000
  44.                   C( 1, 3)        0.0000000000000            0.0000000000000
  45.                   C( 1, 4)        0.0000000000000            0.0000000000000
  46.                   C( 1, 5)        4.0000000000000            0.0000000000000
  47.                   C( 2, 1)        0.0000000000000            0.0000000000000
  48.                   C( 2, 2)        0.0000000000000            0.0000000000000
  49.                   C( 2, 3)        0.0000000000000            0.0000000000000
  50.                   C( 2, 4)        1.0000000000000            0.0000000000000
  51.                   C( 2, 5)        2.0000000000000            0.0000000000000
  52.                   C( 3, 1)        0.0000000000000            0.0000000000000
  53.                   C( 3, 2)        0.0000000000000            0.0000000000000
  54.                   C( 3, 3)        0.0000000000000            0.0000000000000
  55.                   C( 3, 4)        2.0000000000000            0.0000000000000
  56.                   C( 3, 5)        1.0000000000000            0.0000000000000
  57.                   C( 4, 1)        0.0000000000000            0.0000000000000
  58.                   C( 4, 2)        0.0000000000000            0.0000000000000
  59.                   C( 4, 3)        0.0000000000000            0.0000000000000
  60.                   C( 4, 4)        3.0000000000000            0.0000000000000
  61.                   C( 4, 5)        0.0000000000000            0.0000000000000
  62.                   C( 5, 1)        0.0000000000000            0.0000000000000
  63.                   C( 5, 2)        0.0000000000000            0.0000000000000
  64.                   C( 5, 3)        1.0000000000000            0.0000000000000
  65.                   C( 5, 4)        0.0000000000000            0.0000000000000
  66.                   C( 5, 5)        2.0000000000000            0.0000000000000
  67.                   C( 6, 1)        0.0000000000000            0.0000000000000
  68.                   C( 6, 2)        0.0000000000000            0.0000000000000
  69.                   C( 6, 3)        1.0000000000000            0.0000000000000
  70.                   C( 6, 4)        1.0000000000000            0.0000000000000
  71.                   C( 6, 5)        1.0000000000000            0.0000000000000
  72.                   C( 7, 1)        0.0000000000000            0.0000000000000
  73.                   C( 7, 2)        0.0000000000000            0.0000000000000
  74.                   C( 7, 3)        1.0000000000000            0.0000000000000
  75.                   C( 7, 4)        2.0000000000000            0.0000000000000
  76.                   C( 7, 5)        0.0000000000000            0.0000000000000
  77.                   C( 8, 1)        0.0000000000000            0.0000000000000
  78.                   C( 8, 2)        0.0000000000000            0.0000000000000
  79.                   C( 8, 3)        2.0000000000000            0.0000000000000
  80.                   C( 8, 4)        0.0000000000000            0.0000000000000
  81.                   C( 8, 5)        1.0000000000000            0.0000000000000
  82.                   C( 9, 1)        0.0000000000000            0.0000000000000
  83.                   C( 9, 2)        0.0000000000000            0.0000000000000
  84.                   C( 9, 3)        2.0000000000000            0.0000000000000
  85.                   C( 9, 4)        1.0000000000000            0.0000000000000
  86.                   C( 9, 5)        0.0000000000000            0.0000000000000
  87.                  C( 10, 1)        0.0000000000000            0.0000000000000
  88.                  C( 10, 2)        1.0000000000000            0.0000000000000
  89.                  C( 10, 3)        0.0000000000000            0.0000000000000
  90.                  C( 10, 4)        0.0000000000000            0.0000000000000
  91.                  C( 10, 5)        2.0000000000000            0.0000000000000
  92.                  C( 11, 1)        0.0000000000000            0.0000000000000
  93.                  C( 11, 2)        1.0000000000000            0.0000000000000
  94.                  C( 11, 3)        0.0000000000000            0.0000000000000
  95.                  C( 11, 4)        1.0000000000000            0.0000000000000
  96.                  C( 11, 5)        1.0000000000000            0.0000000000000
  97.                  C( 12, 1)        0.0000000000000            0.0000000000000
  98.                  C( 12, 2)        1.0000000000000            0.0000000000000
  99.                  C( 12, 3)        0.0000000000000            0.0000000000000
  100.                  C( 12, 4)        2.0000000000000            0.0000000000000
  101.                  C( 12, 5)        0.0000000000000            0.0000000000000
  102.                  C( 13, 1)        0.0000000000000            0.0000000000000
  103.                  C( 13, 2)        1.0000000000000            0.0000000000000
  104.                  C( 13, 3)        1.0000000000000            0.0000000000000
  105.                  C( 13, 4)        0.0000000000000            0.0000000000000
  106.                  C( 13, 5)        1.0000000000000            0.0000000000000
  107.                  C( 14, 1)        0.0000000000000            0.0000000000000
  108.                  C( 14, 2)        2.0000000000000            0.0000000000000
  109.                  C( 14, 3)        0.0000000000000            0.0000000000000
  110.                  C( 14, 4)        0.0000000000000            0.0000000000000
  111.                  C( 14, 5)        0.0000000000000            0.0000000000000
  112.                  C( 15, 1)        1.0000000000000            0.0000000000000
  113.                  C( 15, 2)        0.0000000000000            0.0000000000000
  114.                  C( 15, 3)        0.0000000000000            0.0000000000000
  115.                  C( 15, 4)        0.0000000000000            0.0000000000000
  116.                  C( 15, 5)        2.0000000000000            0.0000000000000
  117.                  C( 16, 1)        1.0000000000000            0.0000000000000
  118.                  C( 16, 2)        0.0000000000000            0.0000000000000
  119.                  C( 16, 3)        0.0000000000000            0.0000000000000
  120.                  C( 16, 4)        1.0000000000000            0.0000000000000
  121.                  C( 16, 5)        1.0000000000000            0.0000000000000
  122.                  C( 17, 1)        1.0000000000000            0.0000000000000
  123.                  C( 17, 2)        0.0000000000000            0.0000000000000
  124.                  C( 17, 3)        1.0000000000000            0.0000000000000
  125.                  C( 17, 4)        0.0000000000000            0.0000000000000
  126.                  C( 17, 5)        0.0000000000000            0.0000000000000
  127.                  C( 18, 1)        1.0000000000000            0.0000000000000
  128.                  C( 18, 2)        1.0000000000000            0.0000000000000
  129.                  C( 18, 3)        0.0000000000000            0.0000000000000
  130.                  C( 18, 4)        0.0000000000000            0.0000000000000
  131.                  C( 18, 5)        0.0000000000000            0.0000000000000
  132.                  C( 19, 1)        2.0000000000000            0.0000000000000
  133.                  C( 19, 2)        0.0000000000000            0.0000000000000
  134.                  C( 19, 3)        0.0000000000000            0.0000000000000
  135.                  C( 19, 4)        0.0000000000000            0.0000000000000
  136.                  C( 19, 5)        0.0000000000000            0.0000000000000

  137.                        Row           Slack or Surplus             Dual Price
  138.                          1        0.0000000000000            0.0000000000000
  139.                          2        0.0000000000000            0.0000000000000
  140.                          3        0.0000000000000            0.0000000000000
  141.                          4        1.0000000000000            0.0000000000000
  142.                          5        0.0000000000000            0.0000000000000
  143.                          6        118.00000000000           -1.0000000000000

复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2023-5-30 11:56:56 | 显示全部楼层
nyy 发表于 2023-5-30 11:51
求解结果:
居然迭代10次就能得到结果!

lingo还能直接给出非零解。这样给出来的求解结果更简单表达更简洁!
  1.   Global optimal solution found.
  2.   Objective value:                       118.00000000000
  3.   Objective bound:                       118.00000000000
  4.   Infeasibilities:                       0.0000000000000
  5.   Extended solver steps:                               0
  6.   Total solver iterations:                            10
  7.   Elapsed runtime seconds:                          0.06


  8.   Model Title: 钢管下料问题
  9.                   Variable                  Value               Reduced Cost
  10.                 GENSHU( 9)        3.0000000000000            1.0000000000000
  11.                GENSHU( 12)        12.000000000000            1.0000000000000
  12.                GENSHU( 13)        26.000000000000            1.0000000000000
  13.                GENSHU( 16)        54.000000000000            1.0000000000000
  14.                GENSHU( 19)        23.000000000000            1.0000000000000

复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 19:36 , Processed in 0.028685 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表