使用优化工具箱在非线性矩阵操作
1视图(30天)
显示旧的评论
我在寻找优化问题如下,我不知道如何优化通过Matlab代码或工具箱。
我有一个最小成本的问题
参数如下所示:
BidPrices =(4735, 4730, 4727, 410409 .7,409, 59岁,58.8,58.5);%的参数包括投标价格列3证券。
BidQuantity = (7000, 2500, 1081, 320, 1500, 25000, 754000, 20000, 101026];%为每个投标报价数量
OpenPrice = (4735; 410; 59.1)%的公开价格
重量= (0.5;0.25;0.25)
数量= 0(三3)%变量最小化
f = Qunatity * BidPrices%函数最小化
约束:
%积极的非零数量浮点数值用
数量> = 0
数量=整数
%数量不能超过收购数量
(数量:1)< = BidQuantity (: 1);
(数量:2)< = BidQuantity (:, 2);
(数量:3)< = BidQuantity (:, 3);
%的总指数的变化从OpenPrice高于1%
%的第一步:定义活动价格矩阵也因为从bid1 bid2数量改变的价格指数
为I = 1:长度(OpenPrice)
如果数量(我,1)> 0 & &数量(我,2)> 0
EffectivePrice(我,1)= 0
其他的
EffectivePrice(我,1)= 0
结束
如果EffectivePrice(我,1)= = 0 & &数量(我,2)= = 0 & &数量(我,3)= = 0
EffectivePrice(我,2)= 0
其他的
EffectivePrice(我,2)= 0
结束
如果EffectivePrice(我,1)= = 0 & &数量(我,3)> 0
EffectivePrice(我,3)= 1
其他的
EffectivePrice(我,3)= 0
结束
结束
%步骤2:定义约束
约束= ((EffectivePrice * BidPrices *权重)/ (OpenPrice *权重))1 < = 0.01
%如何正确地把它写在Matlab代码以便Matlab可以解决吗?我没有成功的工具。
答案(2)
沃尔特·罗伯森
2017年1月5日
你有
约束= ((EffectivePrice * BidPrices *权重)/ (OpenPrice *权重))1 < = 0.01
在任何一个时候,EffectivePrice是试验值和BidPrices和权重的向量和OpenPrice输入。
所以开始做一些代数:
((EffectivePrice * BidPrices *权重)/ (OpenPrice *权重))1 < = 0.01
impies
((EffectivePrice * BidPrices *权重)/ (OpenPrice *权重))< = 1.01
意味着
((EffectivePrice * BidPrices *权重)< = 1.01 * (OpenPrice *权重)
意味着
EffectivePrice < = 1.01 * (OpenPrice *权重)/ (BidPrices *权重)
右边的一切都提前知道,所以它可以作为upperbound计算。
现在我们遇到的问题OpenPrice和权重都是3 x 1所以你不能“*”在一起。如果我们想这公式
1.01 * (OpenPrice。*权重)/ (BidPrices *权重)
然后我们得到
ans =
0.505346858984519 0 0
0.0218787974850742 0 0
0.00315374861309241 0 0
现在我们通过代码我们可以看到EffectivePrice是一个二进制变量,值0除了在EffectivePrice(我,1)= = 0 & &数量(我,3)> 0。我们可以看到,所有的约束值0或小于1的值。需要二进制值,这告诉我们,EffectivePrice必须恒等于0。
这个分析假设当你写
约束= ((EffectivePrice * BidPrices *权重)/ (OpenPrice *权重))1 < = 0.01
,即使(EffectivePrice * BidPrices *权重)/ (OpenPrice *权重))是一个3 x 3矩阵,,你想要“1”适用于所有9项。计算不同如果“1”应该成为眼睛(3)
…你还没有解释如何“最小化”f = Qunatity * BidPrices 3 x 3