讨论一个算法,请各路大神指教

失足成万古风流人物 2020-06-06 01:39:04
问题描述如下:
1)n段长度不一的管子;
2)m段长度不一的需求,从1)中截取;
3)2)中的所有需求,不允许有接口;
4)完成需求后,1)中的管子剩余长度小于200的即为浪费;
5)如1)中存在长度比例悬殊的管子(长/短>=10),短的剩余在100以内的情况,优于长的无浪费的情况。


如上,如何找到最优解:浪费总长度最小,且短的优先使用。


简化一下,假如我已计算出所有能完成需求的方案,那么如何从这些方案中找到最优。
方法原型如下,planList是所有能完成需求的方案,从planList中找到最优解:

Plan func(list<int> n, list<int> m,list<Plan> planList);

class Plan{
list<PlanStep> steps;
}

class PlanStep{
int mIndex;//需求下标
int nIndex;//原材料下标
int length;//截取长度
}





...全文
2838 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cc0427 2021-01-17
  • 打赏
  • 举报
回复
楼主能否分享下源码
  • 打赏
  • 举报
回复
忘记结贴了,感兴趣的欢迎讨论:http://106.53.17.139:8088/demo/
  • 打赏
  • 举报
回复
搭了个demo,有兴趣的可以看看:http://106.53.17.139:8088/demo/
  • 打赏
  • 举报
回复
引用 14 楼 tanta 的回复:
典型的背包问题,楼主可以百度下,有现成算法
问题的核心确实可以对接背包问题。
tanta 2020-07-24
  • 打赏
  • 举报
回复
典型的背包问题,楼主可以百度下,有现成算法
marmothac 2020-07-22
  • 打赏
  • 举报
回复
以前解决的方法,其实未去考虑什么大神的算法,只是按实际生产中作业中可操作的方法来的 先切最长的,剩下的端头,从余下的需求中去查是否还有可用,如果没有,是否满足废料要求,是否有保留长度大于多少可保留以后用的要求 这样就可以了
  • 打赏
  • 举报
回复
如果问题大一点儿,例如 n >=200,而 m>=100,并且还有 m*k 个其它需求约束条件,你还能用经验法去凑出来答案吗?
  • 打赏
  • 举报
回复
你的这类问题太简单了,其实不值得编写程序。真正的问题有时候有200个变量,100多个约束条件,用 Excel 或者 Microsoft.SolverFoundation 求解,几秒钟完成。
hztltgg 2020-07-22
  • 打赏
  • 举报
回复
遗传、蚁群这些算法本质也就是穷举,只是有方向的穷举,效果应该不会太差,参数可能没配置好。 实际工程上可能材料切割长度没有那么多变化,最优解凭经验早就试出来了,算法上省下来的那一点点浪费不值得
  • 打赏
  • 举报
回复
今天优化了算法,整体思想简单来说就是模拟人工下料的过程。 学术论文研究了那么多年写了那么多论文,基本是瞎搞不切合实际而且我十分怀疑数据造假。
  • 打赏
  • 举报
回复
贴一组数据:

方案1:
余    1,排样规则:3514=3513
余    4,排样规则:4549=4545
余   10,排样规则:4688=4678
余    0,排样规则:3490=3490
余    1,排样规则:10962=2448+3959+4554
余    1,排样规则:9013=2270+1609+5133
余    1,排样规则:7917=4568+3348
余    4,排样规则:12186=4002+2467+5713
余    9,排样规则:10403=3627+2447+4320
余    1,排样规则:9056=2280+3690+3085
余    0,排样规则:14219=5392+4900+3927
余    0,排样规则:14704=3933+2221+4524+4026
余    2,排样规则:9044=1894+4336+2812
余    1,排样规则:14673=4550+4844+5278
余    1,排样规则:7614=3740+3873
余    1,排样规则:11532=3812+1670+3577+2472
余    1,排样规则:10784=4031+3320+3432
余    2,排样规则:8871=3950+4919
余    0,排样规则:12701=5336+2981+4384
余    0,排样规则:10267=4054+3760+2453
余    0,排样规则:8538=1668+4403+2467
余    2,排样规则:6024=3348+2674
余    1,排样规则:13225=2864+2946+4327+3087
余    5,排样规则:12734=4635+3828+1988+2278
余    0,排样规则:27656=2701+5619+1775+4535+4161+3138+5727
余    2,排样规则:23865=2355+5548+5422+4339+2997+3202
余    3,排样规则:18251=4812+3298+5386+4752
余    1,排样规则:17717=3222+3020+4010+4156+3308
余    0,排样规则:21608=5156+4898+3988+2968+1986+2612
余    1,排样规则:18706=2779+5709+4040+2149+4028
余    1,排样规则:28280=5576+2921+5594+4320+4137+5731
余    0,排样规则:19110=3101+3677+2809+1784+4130+3609
余    3,排样规则:19147=3860+2582+1600+1725+5122+4255
余    4,排样规则:21970=5536+2411+3489+4018+3816+2696
余    0,排样规则:17030=5593+1997+5151+4289
余    2,排样规则:16586=5549+2282+3642+5111
余    2,排样规则:26366=2985+4600+4265+1845+4996+3395+1768+2510
余    4,排样规则:25215=4641+5370+5722+5438+4040
余 3623,排样规则:23952=3241+1656+3568+2398+5621+3845
余 8592,排样规则:18678=5512+4574

方案2:
余   14,排样规则:3973=3959
余    1,排样规则:3514=3513
余    4,排样规则:4549=4545
余   10,排样规则:4688=4678
余   12,排样规则:3113=3101
余   18,排样规则:4659=4641
余    0,排样规则:3490=3490
余   15,排样规则:4884=1784+3085
余    5,排样规则:10962=2453+3020+3202+2282
余    0,排样规则:9013=3950+1668+3395
余    0,排样规则:7917=2270+2946+2701
余    0,排样规则:12186=4156+3627+4403
余    0,排样规则:10403=2221+2812+5370
余    6,排样规则:9056=4996+4054
余    4,排样规则:14219=2968+5621+2278+3348
余    0,排样规则:14704=2997+5713+2696+3298
余    0,排样规则:9044=5111+3933
余    0,排样规则:14673=3690+5727+2447+2809
余    1,排样规则:7614=3740+3873
余    2,排样规则:11532=4010+5122+2398
余    0,排样规则:10784=4600+3320+2864
余    0,排样规则:8871=4752+1609+2510
余    1,排样规则:12701=5536+4026+3138
余    4,排样规则:10267=4574+3222+2467
余    0,排样规则:8538=4289+1894+2355
余    2,排样规则:6024=3348+2674
余    0,排样规则:13225=3489+4320+1600+3816
余    2,排样规则:12734=3568+5133+4031
余    1,排样规则:27656=4002+4524+1775+3927+4844+3432+5151
余    5,排样规则:23865=4535+3642+3677+2612+3845+5549
余    3,排样规则:18251=5594+5512+4161+2981
余    0,排样规则:17717=2149+5576+5438+4554
余    6,排样规则:21608=3241+4339+5392+2921+5709
余    0,排样规则:18706=4336+3828+5156+5386
余    2,排样规则:28280=4635+4040+5422+4130+5731+4320
余    2,排样规则:19110=1656+2411+3988+4040+4028+2985
余    0,排样规则:19147=2472+4255+4265+4137+4018
余    8,排样规则:21970=5548+5278+1725+4327+1997+3087
余    5,排样规则:17030=5722+1988+4568+2280+2467
余    1,排样规则:16586=4550+5593+2582+3860
余    1,排样规则:26366=1768+5619+2779+4898+4384+3308+3609
余    1,排样规则:25215=3577+1670+4919+4812+5336+4900
余10101,排样规则:23952=2448+3812+1986+3760+1845

方案3:
余   14,排样规则:3973=3959
余    1,排样规则:3514=3513
余   27,排样规则:4627=4600
余    4,排样规则:4549=4545
余   10,排样规则:4688=4678
余   12,排样规则:3113=3101
余   18,排样规则:4659=4641
余    0,排样规则:3490=3490
余    6,排样规则:4884=1656+3222
余    4,排样规则:10962=2472+3642+4844
余    0,排样规则:9013=1894+2221+4898
余    3,排样规则:7917=4054+3860
余    6,排样规则:12186=3489+4535+4156
余    2,排样规则:10403=2448+3927+4026
余    6,排样规则:9056=2280+1670+1668+3432
余    0,排样规则:14219=4265+4568+5386
余    2,排样规则:14704=3577+4040+3395+3690
余    0,排样规则:9044=2612+2864+3568
余    2,排样规则:14673=3085+2510+5336+3740
余    3,排样规则:7614=2674+2355+2582
余    0,排样规则:11532=1725+3627+4031+2149
余    7,排样规则:10784=4028+3828+2921
余    0,排样规则:8871=3760+5111
余    0,排样规则:12701=5512+2270+4919
余    1,排样规则:10267=3308+1988+1768+3202
余    5,排样规则:8538=4130+4403
余    4,排样规则:6024=2411+3609
余    1,排样规则:13225=5549+4327+3348
余    2,排样规则:12734=2812+4384+5536
余    2,排样规则:27656=5548+2779+3298+4752+2467+3845+1997+2968
余    1,排样规则:23865=4812+4018+4161+4574+1775+4524
余    0,排样规则:18251=4137+3241+5151+5722
余    1,排样规则:17717=3087+5727+4002+4900
余    0,排样规则:21608=2981+4554+4040+5713+4320
余    1,排样规则:18706=2278+5370+5438+5619
余    7,排样规则:28280=5392+2453+3138+2467+5709+2282+3812+3020
余    0,排样规则:19110=5422+4255+2696+2398+4339
余    0,排样规则:19147=5576+2701+1600+3677+5593
余    4,排样规则:21970=1609+4336+5621+5122+5278
余    6,排样规则:17030=3988+2985+5731+4320
余    1,排样规则:16586=4550+2946+3933+5156
余    1,排样规则:26366=5133+4996+2997+2809+2447+4635+3348
余    4,排样规则:25215=3816+4289+1784+3873+5594+1845+4010
余14696,排样规则:23952=3950+3320+1986

方案4:
余   14,排样规则:3973=3959
余    1,排样规则:3514=3513
余   27,排样规则:4627=4600
余    4,排样规则:4549=4545
余   10,排样规则:4688=4678
余   12,排样规则:3113=3101
余   33,排样规则:3906=3873
余   18,排样规则:4659=4641
余    0,排样规则:3490=3490
余    6,排样规则:4884=1656+3222
余    0,排样规则:10962=4161+2985+3816
余    6,排样规则:9013=5709+3298
余   12,排样规则:7917=2467+5438
余    2,排样规则:12186=3860+2812+5512
余    7,排样规则:10403=4130+2946+3320
余    3,排样规则:9056=2612+2701+3740
余    1,排样规则:14219=3202+3609+4320+3087
余    0,排样规则:14704=4919+4026+2674+3085
余   10,排样规则:9044=5392+3642
余    0,排样规则:14673=4255+4535+1768+1668+2447
余    0,排样规则:7614=5336+2278
余    0,排样规则:11532=4635+1997+4900
余    1,排样规则:10784=2864+2398+1894+3627
余    1,排样规则:8871=4550+4320
余    2,排样规则:12701=5722+4524+2453
余    0,排样规则:10267=4018+4028+2221
余    2,排样规则:8538=5727+2809
余    4,排样规则:6024=2779+3241
余    2,排样规则:13225=5370+2467+5386
余    0,排样规则:12734=2282+4031+4010+2411
余    4,排样规则:27656=5536+5621+4568+5156+1775+4996
余    1,排样规则:23865=1670+2981+3950+3933+1600+2997+3812+2921
余    2,排样规则:18251=3927+3690+4752+2448+3432
余    0,排样规则:17717=2270+4844+1609+1986+4040+2968
余    1,排样规则:21608=4137+4002+4336+4040+2510+2582
余    0,排样规则:18706=3308+3828+4403+4812+2355
余    3,排样规则:28280=3489+2472+5619+1784+2696+3677+4156+4384
余    1,排样规则:19110=3020+4898+5151+2280+3760
余    0,排样规则:19147=3138+4554+5593+1988+1725+2149
余    0,排样规则:21970=5731+5278+4265+3348+3348
余    0,排样规则:17030=5713+1845+4339+5133
余    1,排样规则:16586=3395+4574+4327+4289
余    9,排样规则:26366=3988+3568+5576+5594+4054+3577
余   40,排样规则:25215=5111+5122+3845+5548+5549
余18530,排样规则:23952=5422

方案5:
余   14,排样规则:3973=3959
余    1,排样规则:3514=3513
余   27,排样规则:4627=4600
余    4,排样规则:4549=4545
余   10,排样规则:4688=4678
余   12,排样规则:3113=3101
余   33,排样规则:3906=3873
余   18,排样规则:4659=4641
余   41,排样规则:4095=4054
余    0,排样规则:3490=3490
余   12,排样规则:4884=1670+3202
余   43,排样规则:3130=3087
余    0,排样规则:10962=2779+3609+4574
余    2,排样规则:9013=5713+3298
余    5,排样规则:7917=1775+2510+3627
余    2,排样规则:12186=2612+5727+3845
余    2,排样规则:10403=2582+2270+5549
余    0,排样规则:9056=3348+2467+3241
余    3,排样规则:14219=2280+5278+2968+3690
余    3,排样规则:14704=5512+4554+4635
余    0,排样规则:9044=2282+3085+3677
余    0,排样规则:14673=3020+4320+4524+2809
余    1,排样规则:7614=2467+2472+2674
余    4,排样规则:11532=4339+1768+1609+3812
余    0,排样规则:10784=3927+3860+2997
余    2,排样规则:8871=3138+5731
余    1,排样规则:12701=4844+4040+3816
余    2,排样规则:10267=5576+2411+2278
余    0,排样规则:8538=1656+2864+4018
余    0,排样规则:6024=1894+4130
余    1,排样规则:13225=2221+3308+1986+5709
余    6,排样规则:12734=5621+4752+2355
余    0,排样规则:27656=4040+5111+4137+2701+5438+1845+4384
余    4,排样规则:23865=1668+4031+4002+3348+1784+5386+3642
余    0,排样规则:18251=4320+4336+1600+5548+2447
余    1,排样规则:17717=3320+5156+1725+3489+4026
余    1,排样规则:21608=5722+5619+3828+1997+1988+2453
余    1,排样规则:18706=2985+3395+4535+4568+3222
余    0,排样规则:28280=3568+2696+5370+2981+5151+5593+2921
余    3,排样规则:19110=3577+2398+5422+4898+2812
余    0,排样规则:19147=3740+3950+3760+3432+4265
余    0,排样规则:21970=4156+2448+4900+4289+4028+2149
余    2,排样规则:17030=4161+5594+2946+4327
余 3509,排样规则:16586=4812+4010+4255
余   50,排样规则:26366=4919+5392+5536+5133+5336
余   22,排样规则:18678=3988+5122+4996+4550
余10847,排样规则:19183=4403+3933

方案6:
余   14,排样规则:3973=3959
余    1,排样规则:3514=3513
余   27,排样规则:4627=4600
余    4,排样规则:4549=4545
余   10,排样规则:4688=4678
余   12,排样规则:3113=3101
余   33,排样规则:3906=3873
余   18,排样规则:4659=4641
余   41,排样规则:4095=4054
余    0,排样规则:3490=3490
余   12,排样规则:4884=1670+3202
余   43,排样规则:3130=3087
余    4,排样规则:10962=3677+3348+3933
余    1,排样规则:9013=5370+3642
余    1,排样规则:7917=3577+4339
余    4,排样规则:12186=3568+4040+4574
余    8,排样规则:10403=5438+1609+3348
余    0,排样规则:9056=1845+3816+3395
余    0,排样规则:14219=1656+2921+3320+2582+3740
余    9,排样规则:14704=2946+5392+2355+4002
余    3,排样规则:9044=4752+4289
余    2,排样规则:14673=3085+4137+4996+2453
余    0,排样规则:7614=5336+2278
余    6,排样规则:11532=2398+3828+2280+3020
余    0,排样规则:10784=2968+4327+3489
余    0,排样规则:8871=2674+2448+1600+2149
余   18,排样规则:12701=3609+4524+4550
余    0,排样规则:10267=3138+2809+4320
余    4,排样规则:8538=2812+5722
余    1,排样规则:6024=1768+4255
余   12,排样规则:13225=2472+5619+5122
余    0,排样规则:12734=2270+4320+1988+4156
余    2,排样规则:27656=2467+4554+4336+1775+4812+5549+4161
余    0,排样规则:23865=4635+3927+4028+5548+5727
余    1,排样规则:18251=2701+4844+5594+5111
余    1,排样规则:17717=4898+3812+3298+1668+4040
余    2,排样规则:21608=4265+3760+4568+3627+5386
余   10,排样规则:18706=2981+3308+4031+2864+5512
余   10,排样规则:28280=4919+3432+1784+1986+5536+4900+5713
余    0,排样规则:19110=2696+3950+2612+1997+3845+4010
余    1,排样规则:19147=3988+1894+2510+5133+5621
余    0,排样规则:21970=5151+5422+3222+2411+2779+2985
余   14,排样规则:17030=5576+5731+5709
余   12,排样规则:16586=4403+5156+2997+4018
余    3,排样规则:26366=3860+4384+1725+3241+5278+2282+5593
余 3723,排样规则:18678=4130+2467+3690+2447+2221
余10622,排样规则:19183=4535+4026

方案7:
余   14,排样规则:3973=3959
余   68,排样规则:4229=4161
余    1,排样规则:3514=3513
余   27,排样规则:4627=4600
余    4,排样规则:4549=4545
余   10,排样规则:4688=4678
余   12,排样规则:3113=3101
余   33,排样规则:3906=3873
余   18,排样规则:4659=4641
余   41,排样规则:4095=4054
余    0,排样规则:3490=3490
余   13,排样规则:4884=1784+3087
余   45,排样规则:3130=3085
余    1,排样规则:10962=3489+3845+3627
余    0,排样规则:9013=2282+4320+2411
余    1,排样规则:7917=3348+4568
余    0,排样规则:12186=3395+3988+2448+2355
余    0,排样规则:10403=4327+3927+2149
余    0,排样规则:9056=4919+4137
余   14,排样规则:14219=4898+5151+4156
余    3,排样规则:14704=2510+4336+3320+4535
余    6,排样规则:9044=4635+4403
余    1,排样规则:14673=4130+3828+2674+4040
余    5,排样规则:7614=1988+5621
余    3,排样规则:11532=3677+3298+4554
余   25,排样规则:10784=2968+3241+4550
余    1,排样规则:8871=3432+5438
余    1,排
  • 打赏
  • 举报
回复
引用 8 楼 以专业开发人员为伍 的回复:
你的这类问题太简单了,其实不值得编写程序。真正的问题有时候有200个变量,100多个约束条件,用 Excel 或者 Microsoft.SolverFoundation 求解,几秒钟完成。
大神,我很想知道怎么用excel或Microsoft.SolverFoundation完成这个事儿。确实原料规格最大也就200了,零件规格最多也就100左右。
  • 打赏
  • 举报
回复
引用 7 楼 hztltgg 的回复:
遗传、蚁群这些算法本质也就是穷举,只是有方向的穷举,效果应该不会太差,参数可能没配置好。 实际工程上可能材料切割长度没有那么多变化,最优解凭经验早就试出来了,算法上省下来的那一点点浪费不值得
参数调了又调,还是挑不出来。生产中问题很复杂,原料规格不一,需求规格不一,一个好的切割方案和一个一般的切割方案,废料差积累下来还是很可观。并且凭经验算出的方案大概率是一个一般甚至比一般更差的方案,并且很烧脑、耗时耗工。
  • 打赏
  • 举报
回复
看来此问题,接触过的人不多,虽然只有几个回帖,但是得到了很多有用信息,比如“一维下料”、“cutting stock problem”、“NP-hard”等。从这些信息了解到问题的研究方向。于是各种看硕士论文,这些论文中提到了很多“高大上”的算法用来解决该问题,而且论文中的试验结果也非常漂亮。于是我用论文中的算法做了如下尝试: 1、穷举法:此算法最常规,但是复杂度大,而且随着原料数量的增加,时间复杂度成指数级增长,根本无法用于生产; 2、遗传算法:完全跟着论文做,跑出来的结果跟论文中的结果相差甚远,无法再生产中使用。这些东西也就是用来毕业的。 3、蚁群算法:不敢再跟着论文做了,未做深入研究,不过我估计,也是用来糊弄老师的 4、线性规划:可能会有效果,未做研究。 最后,本人研究出一套自创算法,简单有效,用户用了都说好。这里不方便说了,涉及到一些商业上的东西。有感兴趣的可以私信联系。 忠告:不要盲目相信一些论文,时间搭进去,结果却出不来。
threenewbee 2020-06-06
  • 打赏
  • 举报
回复
排料算法是NP Hard的,(在数据规模比较大的情况下)只能求近似最优
https://download.csdn.net/download/wh2623/9863860
  • 打赏
  • 举报
回复
学习一下框架 Microsoft.SolverFoundation
  • 打赏
  • 举报
回复
引用 1 楼 github_36000833 的回复:
一般意义上的最优解是没有办法得到的,因为该问题cutting stock problem(优化下料问题)是NP-hard。NP-hard简单的说,就是没有多项式的解法。 或许你应该追求‘可满意’的解法,或可接受的解法,而不是最优解。 如果你有学术上的兴趣,可以自行搜索“优化下料问题”,也可以先阅读如下文章,先了解问题深浅: 【一维优化下料问题】,张春玲,崔耀东 http://manu28.magtech.com.cn/Jweb_gllg/CN/article/downloadArticleFile.do?attachType=PDF&id=1744 【型材下料问题算法研究】,刘润涛,陈媛婧 http://cea.ceaj.org/CN/article/downloadArticleFile.do?attachType=PDF&id=25348
的确,“最优解”存在主观意识。 “可满意”表述更正确。
github_36000833 2020-06-06
  • 打赏
  • 举报
回复
一般意义上的最优解是没有办法得到的,因为该问题cutting stock problem(优化下料问题)是NP-hard。NP-hard简单的说,就是没有多项式的解法。 或许你应该追求‘可满意’的解法,或可接受的解法,而不是最优解。 如果你有学术上的兴趣,可以自行搜索“优化下料问题”,也可以先阅读如下文章,先了解问题深浅: 【一维优化下料问题】,张春玲,崔耀东 http://manu28.magtech.com.cn/Jweb_gllg/CN/article/downloadArticleFile.do?attachType=PDF&id=1744 【型材下料问题算法研究】,刘润涛,陈媛婧 http://cea.ceaj.org/CN/article/downloadArticleFile.do?attachType=PDF&id=25348
掌握数据结构和算法,可称为算法工程师!这是成为架构师的基础,有Google算法大神亲授。我保证你可以写出时空复杂度都很优的架构。有人专门答疑哟!你想要成为架构工程师吗?立即点击报名按钮吧!北上广容不下肉身,三四线放不下灵魂,程序员里没有穷人,有一种土豪叫 算法工程师。程序 = 数据结构 + 算法程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法           ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代表程序员水平的珠穆朗玛。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧