ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 终极武器 : 解决无记认凭证的对账(多张发票凑数字凑金额) - 需要装Lingo软件

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-27 16:47 | 显示全部楼层
原帖由 cyncynthia 于 2010-9-27 12:34 发表
高手们,请问能否使指定和值变成接近值?


要做到这一点,需要修改Lingo模型工作表里面的语句
@SUM(Data_List1(i): Data1(i) * Flag1(i)) = @SUM(Data_List2(i): Data2(i) * Flag2(i)) ;

这一句是要求左列的选择数据和等于右列选择数据和
改为
@SUM(Data_List1(i): Data1(i) * Flag1(i)) <= @SUM(Data_List2(i): Data2(i) * Flag2(i)) ;
即把等号改为小于等于号
然后在下一行增加一句语句(不加这一句,求解模型也是正确的,但偶尔会明明有解都出现无解,原因不明)
@SUM(Data_List1(i): Data1(i) * Flag1(i)) >= @SUM(Data_List2(i): Data2(i) * Flag2(i)) - 100;

这个100就是你要求有多接近,太小则可能无解,太高可能得不到最佳值,建议先用比较大的数值,然后逐渐减少。

最好备份一下再修改,语句应该用文本格式

[ 本帖最后由 灰袍法师 于 2010-9-27 16:51 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-10-10 08:57 | 显示全部楼层
灰袍法师,这几天我在网上搜了若干个软件装上去都不能运作,今天终于将你的见网盘的文件下了下来,试安装了下,在c:\program files\Lingo没有找到Lingo的目录,可能安装出了问题,对帐的事弄得我好头疼,,谢谢!

[ 本帖最后由 blackttea1 于 2010-10-10 10:04 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-10 17:24 | 显示全部楼层
原帖由 blackttea1 于 2010-10-10 08:57 发表
灰袍法师,这几天我在网上搜了若干个软件装上去都不能运作,今天终于将你的见网盘的文件下了下来,试安装了下,在c:\program files\Lingo没有找到Lingo的目录,可能安装出了问题,对帐的事弄得我好头疼,,谢谢!


安装目录并不一定是Program Files\Lingo的

你最好每个硬盘都进去看一下有没有 lingo 字样的文件夹

话说,你安装的时候就可以看到安装路径啊

如果是windows7,你必须要装Lingo11.0 版本,而且默认安装路径是c:\Lingo64_11 或者c:\Lingo32_11

实在找不到就再装一次,记下安装路径好了。

我今天终于传了好多次几个小时,才把Lingo11.0 也发到顶楼所说的邮箱,你可以去下载一下。

[ 本帖最后由 灰袍法师 于 2010-10-11 08:27 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-10-19 05:03 | 显示全部楼层
楼主的妙文,又受教了,谢谢哈

TA的精华主题

TA的得分主题

发表于 2010-10-26 21:41 | 显示全部楼层
恩,规划求解,很可能以后会碰上,先慢慢学,谢谢了!

TA的精华主题

TA的得分主题

发表于 2010-11-23 09:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
什么感谢的话都不用说了,太有用了。

TA的精华主题

TA的得分主题

发表于 2010-11-23 10:47 | 显示全部楼层
方法2
附件增加权重指标,可以用区间法逐步指定求解的权重上限下限,理论上可以找到所有解
实际上,由于以下理由,并不一定可以找到全部解的
a. 增加权重后,运算速度降低10倍以上,所以没有那么多时间;
b. 合要求的解可能有成百个,人手调整权重的上下限会累死,而即使用VBA去控制求解,还是可能跟理由a一样,运算时间太长
c. 可能存在多个解的权重刚好一样大,这样就只能求出其中的一个解了。
以附件的数据为例,至少有19个解,但是一一找出来还是很麻烦的。

灰袍大师,权重的上下限如何调?
为什么要用权重?
望不吝解答。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-11-23 22:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 jinmeiqiu 于 2010-11-23 10:47 发表
灰袍大师,权重的上下限如何调?
为什么要用权重?
望不吝解答。 ...


权重是为了可以找出多个解,虽然我们要求得到组合数字相加等于指定和值,但很显然往往存在许多个解

而给每个组合数字一个随机权重,就可以把求解目标 数字相加等于指定和值 改为约束条件

而新的求解目标是,不仅要求 数字相加等于指定和值,还要求每个数字乘以固定的权重,相加出来的另一个和值(权重总和)最大

这样就可以区分不同的数字组合了

当然,实际运行结果表明,增加权重是个失败的尝试,速度变得太慢了。

而且,随机排序输入数据,或者把找到的解的组合值删掉一个再求解,也可以找到新的组合,没必要用权重。

TA的精华主题

TA的得分主题

发表于 2010-12-1 13:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个软件太好用了。就是有的时候能凑出几种解法,看来需要缩小数据量

TA的精华主题

TA的得分主题

发表于 2010-12-4 16:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求助:对于1型问题多对多的情况,再扩展一下,需要按不同货品的发票来对应,同种货品才能对应,可以解决吗?详见附件。十分感谢,呵呵。

扩展-双列数据求最大值匹配 - Excel内嵌Lingo.rar

31.7 KB, 下载次数: 27

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

本版积分规则

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

GMT+8, 2024-11-16 17:29 , Processed in 0.040971 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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