gpt4 book ai didi

excel - 算法:找到两个差最小且乘积已知的正整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:34 24 4
gpt4 key购买 nike

一些背景...

我目前正在构建一个宏来估算注塑成型工具的成本。这些工具具有充满塑料的空腔。工具具有的型腔数量就是将要成型的零件数量。

到目前为止,我的程序将根据客户需求确定工具可以具有的最少型腔数。这个数字总是偶数。该工具应具有偶数个型腔。给定空腔的边界长度和宽度,并设置空腔在工具内可以占据多少空间的限制,我需要我的程序来计算沿长度和宽度的空腔数量的组合,其差异最小化及其乘积等于工具应具有的最小型腔总数。

我正在编程,我的宏是 SolidWorks VBA。我首先在 Excel 中构建了这个问题并使用了求解器工具。但是,我无法找到一种方法来引用 SolidWorks 中的 Excel 求解器工具来自动执行此优化问题。我希望找到一组巧妙的方程式来为我解决这个特定问题。但如果其他人对使用什么有更好的想法,那就太棒了。

以优化格式改写...

变量

  • x = 沿工具宽度的空腔数
  • y = 沿工具长度的空腔数
  • z = 建议的总型腔数

目标函数

最小化 x - y

这样

  • x * y = z
  • x >= 1
  • y >= 1
  • x <= y
  • x是一个整数
  • y是一个整数

例子

我的宏说为了满足需求,我们的工具需要至少有 48 个型腔。求出沿工具长度和宽度方向的型腔数量,使差异最小且乘积等于 48。理想情况下,在这种情况下,宏将返回 x = 6 和 y = 8。

谢谢!

最佳答案

澄清一下,在这个问题中你的意思是Min y-x而不是 Min x-y ?否则有一个天真的解决方案采用 x = 1y = z . Min x - y = 1-z .

我不会用 VBA 编程,但这是我的想法。

xy是正整数,乘积是z , 与 x <= y .您基本上可以从 x = floor(sqrt(z)) 开始并递减直到 x = 1 .

对于每个 x , 检查是否存在整数 y这样 x * y = z .如果有,打破循环,这就是你要找的那对。否则继续直到 x = 1

如果您需要任何伪代码以便将其转换为 VBA。在这里

int x, y;
for (x = floor(sqrt(z)); x >= 1; --x)
{
y = z / x;
if (x * y == z)
break;
}

关于excel - 算法:找到两个差最小且乘积已知的正整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53014407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com