我收到错误“使用 fmincon 时出错(第 300 行)A 必须有 'n' 列。” 尝试解决以下优化代码时。我认为约束的定义存在错误。有人遇到同样的问题http://goo.gl/35MeC但不幸的是我不会读中文!!
目标是找到受 Y 及其积分 IntY 约束的数组 Y 的最优值。为了更好地理解问题的本质,Y 的每个值都代表一个变量在连续时间步中的值,而要最小化的目标函数基本上是交互成本。
function [Y, IntY] = optTest()
% inputs of the problem
TS = 10; % number of time steps
YMin = -0.1; % minimum value of Y
YMax = 0.2; % maximum value of Y
IntYMin = 0.1; % min value of the integral of Y
IntYMax = 0.9; % max value of the integral of Y
IntYInit = 0.2; % initial value of the integral of Y
Prices = PricesFun(TS);
% use of function 'fmincon', preparation of the inputs
% x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
A = [tril(ones(TS))*1;tril(ones(TS))*-1];
b = [ones(TS,1)*(IntYInit-IntYMin);ones(TS,1)*(IntYMax-IntYInit)];
lb = ones(TS,1)*YMax;
ub = ones(TS,1)*YMin;
Y0 = ones(TS)*IntYInit;
Y = fmincon(@(x) costFun(x, Prices),Y0,A,b,[],[],lb,ub);
IntY = cumsum(Y);
function cost = costFun(x, Prices)
cost = sum(x*Prices);
function P = PricesFun(TS)
x = linspace(1,TS,TS);
pi = 3.1415;
P = 2 + sin(x/TS*4*pi);
上面的代码是自包含的,如果你想尝试,你只需将它粘贴到matlab中并调用函数:
[Y, IntY] = optTest();