gpt4 book ai didi

c# - 为超大列表优化递归函数 .Net

转载 作者:行者123 更新时间:2023-11-30 18:53:18 26 4
gpt4 key购买 nike

我构建了一个应用程序,用于模拟一家公司每月可以在不同“模式”下生产的产品数量。该模拟用于帮助找到运行一个月的最佳模式系列,以最好地满足当月的预计销售预测。该应用程序一直运行良好,直到最近将工厂修改为以其他模式运行。现在可以在 16 种模式下运行。对于有 22 个工作日的一个月,这会产生 9,364,199,760 种可能的组合。过去只有 8 种模式,只能产生 1,560,780 种可能的组合。运行此应用程序的 PC 处于旧端,无法处理抛出内存不足异常之前的计算次数。事实上整个应用程序不能支持超过 15 种模式,因为它使用整数来跟踪模式的数量并且它超过了整数的上限。排除这个问题,我需要尽我所能来减少应用程序的内存使用率并优化它以尽可能高效地运行,即使它不能实现 16 种模式的既定目标。我正在考虑将数据写入磁盘而不是将列表存储在内存中,但在我承担该开销之前,我想听听人们对该方法的意见,看看是否有优化空间。

编辑根据少数人的建议,考虑一些更学术的东西,然后仅仅计算每个可能的答案,下面列出了如何选择最佳运行(模式组合)的简要说明。目前,计算机会确定工厂在该月的工作日数内可以运行的所有可能方式。例如,最多 2 个工作日的 3 种模式将导致 (1,1)、(1,2)、(1,3)、(2,2) 的组合(其中数字代表所选模式), (2,3), (3,3) 对于每种模式,产品以不同的生产率生产,例如在模式 1 中,产品 x 可能以每小时 50 件的速度生产,而产品 y 以每小时 30 件的速度生产,并且产品z 每小时生产 0 个单位。然后将每个组合乘以工作时间和生产率。选择生成与当月每个产品的预测值最匹配的数字的运行。但是,由于某些月份工厂未达到产品的预测值,因此算法会增加下个月产品的优先级,以确保在年底产品达到预测值。由于仓库空间紧张,产品也不要生产过多,这一点很重要。

谢谢

private List<List<int>> _modeIterations = new List<List<int>>();

private void CalculateCombinations(int modes, int workDays, string combinationValues)
{
List<int> _tempList = new List<int>();

if (modes == 1)
{
combinationValues += Convert.ToString(workDays);
string[] _combinations = combinationValues.Split(',');

foreach (string _number in _combinations)
{
_tempList.Add(Convert.ToInt32(_number));
}
_modeIterations.Add(_tempList);
}
else
{
for (int i = workDays + 1; --i >= 0; )
{
CalculateCombinations(modes - 1, workDays - i, combinationValues + i + ",");
}
}
}

最佳答案

这种优化问题困难,但非常得到了很好的研究。您可能应该阅读有关它的文献,而不是试图重新发明轮子。您要查找的关键字是“运筹学”和“组合优化问题”。

众所周知,在优化问题的研究中,随着问题变大,找到问题的最优解决方案在计算上几乎总是不可行的,正如您自己发现的那样。但是,通常情况下,找到保证在最优解的一定百分比内的解是可行的。您可能应该专注于寻找近似解。毕竟,您的销售目标已经只是有根据的猜测,因此找到最佳解决方案已经是不可能的;你没有得到完整的信息。)

我要做的是从阅读关于背包问题的维基百科页面开始:

http://en.wikipedia.org/wiki/Knapsack_problem

这就是“我有一大堆不同值(value)和不同重量的元素,我的背包可以携带 50 磅,在达到我的体重目标的情况下我可以携带的最大可能值(value)是多少?”的问题。

这不完全是你的问题,但显然它是相关的——你有一定数量的“值(value)”可以最大化,并且有有限数量的插槽可以将这个值(value)打包到其中。如果您能开始了解人们如何找到背包问题的近似最优解,您就可以将其应用到您的具体问题中。

关于c# - 为超大列表优化递归函数 .Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1465964/

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