ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aimisiyou

[讨论] 搬石头

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-19 17:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
石头跟背包的想法 相反

TA的精华主题

TA的得分主题

发表于 2019-12-19 17:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 astupig 于 2019-12-19 17:36 编辑

最优解是564. 设定两组变量, 一组用来记录是否搬石头(if moved); 另外一组是所在的力气值是否分配到对应的石头。
增加约束条件就可以了。 这个是比较简单线性规划问题。对了, 我用Open Solver, Excel的插件, 大多时候比Solver快几十倍以上。这个求解大概3秒就出结果了。

image.png


StoneMovingProblem.zip

8.23 KB, 下载次数: 61

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-19 17:34 | 显示全部楼层
丢丢表格 发表于 2019-12-18 20:59
此题用规划求解,今一上午都没运行成功,因为计算量太大了。

要是用 VBA 做,我的四核机  也许得用 1 ...

自带的规划求解速度很慢的, 要用开源求解器。 推荐Open Solver. Bing搜索一下就有。www.opensolver.org

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-19 23:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
astupig 发表于 2019-12-19 17:26
最优解是564. 设定两组变量, 一组用来记录是否搬石头(if moved); 另外一组是所在的力气值是否分配到对应 ...

能详细说说算法流程么?一般的线性规划结果是一维向量,这里的结果是二维向量。

TA的精华主题

TA的得分主题

发表于 2019-12-20 08:19 | 显示全部楼层
aimisiyou 发表于 2019-12-19 23:54
能详细说说算法流程么?一般的线性规划结果是一维向量,这里的结果是二维向量。

这个参考了Network Modeling的做法, 所以有点像二维向量。
这个在线性规划里面叫做混合整数规划, 就是有多组变量协同工作,用一组变量来约束另外一组变量。

比如要决定决定搬哪个石头这组变量(if moved), 总共9个(binary二进制), 用来给目标函数服务的,因为重量值G只是数值(常数),所以要一组变量来做决定。

而那个二维变量是用来规划石头用哪些力气值来搬。比如57,就用3+9+45, 那么在对应的位置填上1,然后SUMPRODUCT. 其实这个跟财务凑数(从一组数里面找出总和是某个目标数的问题)是非常相似的, 可以看作是二维财务凑数, 不过让程序决定能否凑完所有的数(也就是石头)。

约束方面也是要仔细考虑的:
1 每个力气值只能用一次,就有L列小于等于N列这个约束;
2 要if moved这组变量跟那个二维变量的总和进行“联动”,就是要决定搬这个石头(if moved=1)那么所在石头分配的力气值之和要大于这个石头的重量。


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-21 12:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 yjh_27 于 2019-12-21 14:21 编辑

163个最优分配方案,最优解是564

1 按 人力的合力,找石头可能石头组合,有4种组合
2 按 各石头重量 ,找人力可能人力组合
3 按石头组合索引 各人力组合 进行排列,无交集的即为可行分配方案


无标题.jpg
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2019-12-28 00:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

发表于 2019-12-28 14:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-2-14 22:56 | 显示全部楼层
搬石头.png


感觉这个问题和“一维下料”还不一样,似乎是相反的。

我把“力气”当零件,把“石头”当原料,在下料问题中,零件组合长度小于等于原料,但这个搬石头的问题中,力气组合大于等于石头。

本例中的数据恰好可以相等,故而撞出了结果,如果数据变化了,肯定不行的……

TA的精华主题

TA的得分主题

发表于 2020-2-14 23:06 | 显示全部楼层
好像还有两种组合:


搬石头1.png


搬石头2.png

说不定还有其他的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 22:35 , Processed in 0.047557 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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