我想编写一条代码,以查找运行洗碗机的最低成本。这取决于所需的功率,每小时的费率和使用的时间。我为此使用fmincon
,但是下面提供的代码显示以下错误消息:
用户提供的目标函数必须返回标量值
我的目标函数是最小化(总成本*时间)st总成本等于从1小时到24小时的(小时功率)*(小时成本)之和等于0.8千瓦时,而且,总成本必须大于Ca
,并且一天的总运行时间为一小时。
% Array showing the hourly electricity rates (cents per kwh)
R=zeros(24,1);
R(1:7,1)=6;
R(20:24,1)=6;
R(8:11,1)=9;
R(18:19,1)=9;
R(12:17,1)=13;
p_7 = transpose([0.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]); %This is the power pattern of appliance (operates at 0.8 kWh for 1 hour daily)
for k=1:23
P7(:, k+1) = circshift(p_7,k); % This shows all the possible hours of operation
end
Total = P7*R; % This is the total cost per hour at different hourly tariffs
fun = @(x)Total.*(x);
x0 = [1];
A = Total;
%Ca = 0.5;
Ca = ones(1,24);
b = Ca;
Aeq = Total;
Daily_tot_7 = 2*ones(1,24);
beq = Daily_tot_7;
ub = 24;
lb = 1;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
我相信我对将约束转换为fmincon
的理解是不正确的,并且我可能缺少此问题的重要约束。
答案 0 :(得分:0)
您的输出当前是输出的向量。您说成本函数是每小时元素的总和。因此,您的函数定义应为
fun = @(x)sum(Total.*(x));
但是,如果我阅读此权利,您希望每个小时都解决一次。在这种情况下,您需要将x0变量设置为24x1输入
x0 = ones(24,1);
如果是这种情况,则需要相应地调整A,b,Aeq和beq变量。但是,您实际上是否需要这些,您不能通过将其替换为[]
最后,您最好将p7变量重新定义为
p7 = R*.8;
如果我误解了您要在此处完成的工作,我深表歉意。