ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 灰袍法师请进,这个可能有点难

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-10-9 08:46 | 显示全部楼层 |阅读模式
用VBA有个问题发现很头疼,在多层循环中时间太长了,能不能分成1000个或者更多的同时计算的过程?
例如,以下程序要运行约300天,能不能按i值分成1000个同时计算的过程?如果在VBA中不方便实现,用什么工具能实现?谢谢了先,法师。
Sub example()
Dim i&, j&, k&
For i = 1 To 1000
For j = 1 To 500
  For k = 1 To 500
    Call exam0 '每次运行需0.1秒
  Next
Next
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2012-10-9 09:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
坐等法师改代码

TA的精华主题

TA的得分主题

发表于 2012-10-9 18:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
关键是你的 exam0 是干什么的?
没必要做 2亿5千万次吧???

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-9 23:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
灰袍法师 发表于 2012-10-9 18:40
关键是你的 exam0 是干什么的?
没必要做 2亿5千万次吧???

谢谢回复。把例子改成这样试试。
相当于枚举一个三元函数定义域,求值域最大值。
Sub example()
Dim i&, j&, k&, m#,exa#
For i = 1 To 1000
For j = 1 To 500
  For k = 1 To 500
      exa = Rnd / i + Rnd / j + Rnd / k
      If exa > m Then
      m = exa
      End If
  Next
Next
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2012-10-10 04:01 | 显示全部楼层
本帖最后由 灰袍法师 于 2012-10-10 04:46 编辑
andy3303 发表于 2012-10-9 23:37
谢谢回复。把例子改成这样试试。
相当于枚举一个三元函数定义域,求值域最大值。
Sub example()

求最大值用规划求解即可
没必要随机搞几亿次
我猜测你是要求 f(x,y,z) = 1/x + 1/y + 1/z  x=[1,1000], y=[1,500], z=[1,500] 的最大值

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-10 09:57 | 显示全部楼层
灰袍法师 发表于 2012-10-10 04:01
求最大值用规划求解即可
没必要随机搞几亿次
我猜测你是要求 f(x,y,z) = 1/x + 1/y + 1/z  x=[1,1000], ...

谢谢回复,这只是举个例子,事实上f(x,y,z) 函数很复杂,需要用到工作表中的很多数据。变量也不是想,yxz三个,而是10几个。需要一一枚举。以前用表格计算,完全不行,计算一组需要2-3秒,计算深度很浅,步长用10。最近学了vba,每组大约0.13秒,效率提高了20倍,因此希望增加计算深度,将步长改为1,发现耗时巨大,无法运行下去了。
上例中,如果步长为10,计算时间也只有几个小时。看到CPU的使用并不是很多,完全可以接纳更多运算,因此希望找到让cpu满负荷工作,同时计算很多组参数的方法。
我想,搜索引擎能在很短时间内搜索大量范围并给出结果,是因为把任务分配给了很多其它的计算工具,那么,个人电脑是否也有类似分解cpu的功能呢?

TA的精华主题

TA的得分主题

发表于 2012-10-10 17:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
新人路过。。。。表示楼主好礼貌。。。。

TA的精华主题

TA的得分主题

发表于 2012-10-10 17:59 | 显示全部楼层
andy3303 发表于 2012-10-10 09:57
谢谢回复,这只是举个例子,事实上f(x,y,z) 函数很复杂,需要用到工作表中的很多数据。变量也不是想,yxz ...

我觉得不大可能要穷举才能得到最大值
你还是说清楚你的函数是怎么回事吧
VBA只能用单个CPU核心,所以你看CPU占用率似乎不高,实际上已经是单个核心 100% 占用了。
所以没办法
你改用VB编译,可以再增加5倍左右速度,改用C语言可以增加10-20倍速度,还可以多核运算
问题是:我认为没什么东西是需要这样穷举的。。。。。。

TA的精华主题

TA的得分主题

发表于 2012-10-10 20:14 | 显示全部楼层
这种玩意儿,建议用只能算法进行计算。推荐个只能算法:粒子群算法。这个算法相对简单点

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-10 20:20 | 显示全部楼层
younges 发表于 2012-10-10 20:14
这种玩意儿,建议用只能算法进行计算。推荐个只能算法:粒子群算法。这个算法相对简单点

感谢!我搜搜什么是粒子群算法。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 03:23 , Processed in 0.039169 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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