明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1881|回复: 12

[提问] 求教用lisp 进行简单的一维条材套料的算法

[复制链接]
发表于 2015-7-16 16:17 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 fan_zh 于 2015-7-17 10:46 编辑


如有这样的表(1.2 1.5 2.3 2.6 2.6 3.3 3.5 4.1 4.2),它是从小到大已排序,是有重复项的,实际上为子材的长度,母材的长度为单一长度,如5,要计算所需要母材数量

我知道这是个比较专业的算法领域,论坛上类似程序,但一直没有代码
我想到的简化办法是从大到小进行相加,只要相加满足条件,相加项可能数量为1,也可能2,3,或者更多,然后把相应相加项 从表中去掉,生成新表,再循环
求此代码或能给点类似代码

可能表达不是最清楚,上个图吧,注意图中相加项最多为2项,实际希望可为更多项

附件: 您需要 登录 才可以下载或查看,没有账号?注册
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-7-16 17:03 | 显示全部楼层
Msteel 工具箱有提供这个套料的程序。免费的。
回复

使用道具 举报

 楼主| 发表于 2015-7-16 17:25 | 显示全部楼层
感谢楼上回贴
我是在写个程序,中间有部分数据需要这样算一下

程序输入表,输出计算结果,当然有详细结果输出就更好了
回复

使用道具 举报

发表于 2015-7-17 09:23 | 显示全部楼层
如有这样的表(1.2 1.5 2.3 2.6 2.6 3.3 3.5 4.1 4.2),它是从小到大已排序,是有重复项的,实际上为子材的长度,母材的长度为单一长度,如5,要计算所需要母材数量

我知道这是个比较专业的算法领域,论坛上类似程序,但一直没有代码
我想到的简化办法是从大到小进行相加,只要相加满足条件,相加项可能数量为1,也可能2,3,或者更多,然后把相应相加项 从表中去掉,生成新表,再循环
求此代码或能给点类似代码

你觉得你讲明白了,实际上完全一头雾水。。。。。。。。

原表是(1.2 1.5 2.3 2.6 2.6 3.3 3.5 4.1 4.2)
你想要的目标表或者目标数值是多少?
原表到目标是怎么转换的?
知道这些别人才能帮你编写程序。。。
回复

使用道具 举报

 楼主| 发表于 2015-7-17 10:49 | 显示全部楼层
已更新问题,应该很明白了,最终结果只是一个数值,如图中的6
回复

使用道具 举报

 楼主| 发表于 2015-7-20 08:55 | 显示全部楼层
求高手相助此循环写法
回复

使用道具 举报

发表于 2015-7-22 09:43 | 显示全部楼层
  1. (defun c:qs123()
  2. ; 最节省母材材料?
  3. (setq b1 '(1.2 1.5 2.3 2.6 2.6 4.8 3.3 3.5 4.1 4.2 4.3))
  4. (setq b1 '(1.2 1.5 2.3 2.6 2.6  3.3 3.5 4.1 4.2 ))
  5. (setq b1 (vl-sort  b1 '>))
  6. (setq kn 5 i 0 n 0 b2 b1 b4 '() b3 '() )
  7. (while (cdr b2)
  8.   (setq t1 (car b2)  b2 (cdr b2) t2 (cadr (reverse b2)) t3 (car (reverse b2)) );t3 最后一位
  9.   (cond
  10.   ((<= (+ t1 t2 t3) kn)(setq i (1+ i) b2 (reverse (cdr (cdr (reverse b2))))   b3 (cons (list t1 t2 t3) b3) ))
  11.   ((<= (+ t1 t2 ) kn)(setq i (1+ i) b2 (cons t3 (cdr (cdr (reverse b2)))) b2 (reverse b2)   b3 (cons (list t1 t2) b3)  ))
  12.   ((<= (+ t1 t3) kn)(setq i (1+ i) b2 (reverse  (cdr (reverse b2)))    b3 (cons (list t1 t3) b3) ))
  13.   ((<= t1 kn)(setq i (1+ i)   b3 (cons (list t1) b3) ))
  14.   (t (print t1))
  15.     )
  16.    )
  17.   (setq i (1+ i)  b3 (cons b2 b3) )
  18. (print b1)
  19. (print (reverse b3))(princ i)
  20. (princ)
  21. )
是不是这样?你可以据此再改进。
命令: qs123
(4.2 4.1 3.5 3.3 2.6 2.6 2.3 1.5 1.2)
((4.2) (4.1) (3.5 1.5) (3.3 1.2) (2.6 2.3) 2.6) 6

回复

使用道具 举报

 楼主| 发表于 2015-7-22 11:28 | 显示全部楼层
太感谢了,我去测试下
回复

使用道具 举报

 楼主| 发表于 2015-7-23 15:35 | 显示全部楼层
这种算法是首尾相加,在某些情况下,可能不适用
回复

使用道具 举报

 楼主| 发表于 2015-7-24 11:50 | 显示全部楼层
看看谁还有更好的代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-9 21:58 , Processed in 0.182524 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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