0

这是我需要帮助的问题:

方程:

r = a1*x1 + a2*x2 + a3*x3 + a4*x4,

其中 'x1,x2,x3,x4' 是产品四个方面的得分(均为正);

'a1,a2,a3,a4' 是初始化权重(它们之和为 1);

'r' 计算为该产品的最终分数;

假设产品数量为 100;然后根据最终得分“r”,对 100 个产品进行排序,计算前 10 个产品的等权重利润(给定)。

目的是通过改变权重'a1,a2,a3,a4'来找到加权利润的最大值。

Matlab工具箱有解决的功能吗?我已经搜索了几个,但没有找到适合这个问题的一个。任何建议将不胜感激!

4

1 回答 1

0

创建一个计算加权利润负数的函数(负数,因为 matlab 的内置算法找到最小值)。如果我理解您所描述的内容,它应该看起来像这样。

function f = wprofit(a)
r=-x*a;
r=sort(r);
f=sum(r(1:10));
end

然后使用 fmincon 找到最小值。

Aeq=ones(4,1);
beq=1;
a0=[.25 .25 .25 .25]';
[a,f]=fmincon(@wprofit,a0,[],[],Aeq,beq)
于 2012-02-15T19:04:27.540 回答