找到最小可能的术语x通过尝试各种组合的其他条款,一个已知的总和

2视图(30天)
你好!
这将是一个两部分的问题。
  1. 假设我有一个已知的总和,例如s = 12。我还有很多方面都可以和——的一部分,b, c, d等等,每一个都有一个恒定的数值分配给他们(例如,一个= 2;b = 3.5;c = 1.79等)。有一项x是这笔钱的一部分,但它是未知的,我需要尽可能低。所以,从本质上讲,我需要一个代码将尝试不同的组合,b, c等为了找到一个x是最小的可能值,假设之和保持不变。应该注意的是,一个学期也应该能够多次使用的总和如果这样做是有意义的(例如s = + + +……+ x)。
  2. 现在,每个学期将有一个定义的数量的时候可以使用(例如,可以使用128次,b可以使用64次等等)。当最优的组合已经使用时间的最大数量的一个条款,第二个最优组合条件需要被发现,这个词,已经耗尽了忽略。我需要这个被重复,直到耗尽所有的条款。另外,如果出现情况,最优的组合是s = + + +……+ x,但只剩下2倍,然后结合必须适应,这样没有任何剩菜(如每学期总是应该使用所有可用的数量的次)。
我需要每个组合和使用的时候对我显示按时间顺序作为回报。我怎么使这样的一个脚本呢?我不熟悉编码,它对我来说有点困难来包装我的头,所以任何帮助将不胜感激。

接受的答案

布鲁诺陈德良
布鲁诺陈德良 2022年4月4日
你需要首先制定你的问题由明确的数学问题。
所以我unstand数组
时(在你的情况中= [,,……,a, b, b…b)与重复128次,64次)。
你想要的是找到一个子集S和x这样的
总和(S) + x = S, x(> = 0 ?)你想要尽可能小。
这个问题可以被制定为线性规划浮点数值用。找到
数组大小相同的w w值0或1的元素,这样
x (w): = abs (s - w。*)是最小的。
您可以使用 intlinprog 如果你有优化tollbox来解决它。
12个评论

登录置评。

答案(1)

大卫。马塞罗说道
大卫。马塞罗说道 2022年4月4日
编辑:大卫。马塞罗说道 2022年4月4日
这可能是一个方法
= 2;%可以重复max 128倍
b = 3.5;%可以重复max 64倍
c = 1.79;%可以重复最多32倍
S = 50;%之和
一个= combntns (1:128 3);% 3的所有可能的combintations编号1 - 128
警告:COMBNTNS函数将在未来的版本中被删除。
((:,2)> 64 & (:,3)> 32:)= [];如果# %规则重复的b和c在允许的最大数量
x =年代* (a, b, c);%发现x
x (x < 0) = +正;%排除所有x < 0
[xmin, idx] = min (x);%发现saml x
流(最佳组合是我x + % % + %我x c。x的值如果% f。\ n”,((idx:), xmin])
最好的组合2 x + 7 x 12 b + c。如果0.020000 x的值。
2的评论
大卫。马塞罗说道
大卫。马塞罗说道 2022年4月4日
是的,在如此大的情况下我不会合适的例子,因为矩阵的所有可能组合变得太大,matlab耗尽内存。
在这种情况下,我宁愿选择的建议 @Bruno陈德良 在他的答案,更严格的数学方法。

登录置评。

类别

找到更多的在线性规划和整数线性规划帮助中心文件交换

下载188bet金宝搏


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!