Matlab FMINCON计划设备使用以最小化总成本

Matlab FMINCON计划设备使用以最小化总成本,matlab,optimization,minimization,appliance,Matlab,Optimization,Minimization,Appliance,我想写一个代码来找出运行洗碗机的最低成本。这取决于所需功率、小时费率和使用时间。我正在为此使用fmincon,但下面提供的代码显示以下错误消息: 用户提供的目标函数必须返回标量值 我的目标函数是最小化(总成本*时间)s.t总成本等于(小时功率)*(小时成本)的总和,从1小时到24小时等于0.8 kwh,并且,总成本必须大于Ca,并且一天的总运行时间为一小时 % Array showing the hourly electricity rates (cents per kwh) R=zeros(2

我想写一个代码来找出运行洗碗机的最低成本。这取决于所需功率、小时费率和使用时间。我正在为此使用
fmincon
,但下面提供的代码显示以下错误消息:

用户提供的目标函数必须返回标量值

我的目标函数是最小化(总成本*时间)s.t总成本等于(小时功率)*(小时成本)的总和,从1小时到24小时等于0.8 kwh,并且,总成本必须大于
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
的理解是不正确的,并且我可能遗漏了此问题的重要约束。

您的输出目前是一个输出向量。你说你的成本函数是每小时要素的总和。因此,您的函数定义应该是

fun = @(x)sum(Total.*(x));
然而,如果我读到这个权利,你希望解决每一个小时单独。在这种情况下,您需要将x0变量定义为24x1输入

x0 = ones(24,1);
如果是这种情况,您需要相应地调整A、b、Aeq和beq变量。但是,如果您真的需要这些,您不能用
[]

最后,p7变量最好重新定义为

p7 = R*.8;
如果我误解了你在这里想要实现的目标,我深表歉意