我正在尝试模拟ev(电动汽车)充电的分布式调度程序。期望的行为将削减峰值并填充谷值,换句话说,最小化测试网格上的电负载的峰均比。 (例如在本文中:web.eecs.umich.edu/~hiskens/publications/1940.pdf)
想要结果的图片:
所以,基本上,我正在做的是:
约束如下:
上限是给定参数 ecs.max_load
x0=ecs.schedule;
I=eye(ecs.timeslots);
I(ecs.currenttime:ecs.ev.departure,:)=[];
Aeq=[zeros(1,ecs.currenttime-1) -1*ones(1,ecs.ev.departure-ecs.currenttime+1) zeros(1,ecs.timeslots-ecs.ev.departure);I];
beq=[-1*ecs.ev.requested_chg*ecs.nslotsperhour;ecs.ev_load;zeros(ecs.timeslots-ecs.ev.departure,1)];
A=[];
b=[];
nonlcon=[];
lb=zeros(ecs.timeslots,1);
ub=ecs.max_load*ones(ecs.timeslots,1);
options = optimoptions('fmincon','Algorithm','interior-point','MaxFunEvals',30000);
每个ev的目标函数 par
other_loads :每个非ev负载的 future 行为(不切实际),其余ev计划的负载
other_loads=ecs.game_l; %l_n (all schedules in the grid, mine included)
other_loads(:,ecs.id)=[]; %l_-n (removed my own schedule)
schedule = fmincon(@par,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
function f=par(x)
tot=sum([x other_loads],2);
f=max(tot)/mean(tot);
end
我得到的图片:
这是我的问题:优化不起作用。我一直在修补代码,但我总是得到(差不多)相同的结果,其中山谷根本没有被填充,并且行为几乎是不变的。我通过调试验证了变量的内容是否正确,也许我对优化器做错了什么? 提前致谢