How can i sanction changes in linear optimization?

6 次查看(过去 30 天)
I am trying to optimize Electrical Vehicle charge using a limited number of chargers. (Right now only looking at one hour)
The following Code is working:
% Define max. charger currrent, car capacity and max. car current
charger = [11,22,50];
cars = [10,20,30,40];
maxCurrentCar = [11,22,11,22];
x = optimvar('x',length(cars),length(charger),'LowerBound',0);
chargerconstr = sum(x,1) <= charger;
carcapconstr = sum(x,2) <= cars';
cartimeconstr = sum(x,2) <= maxCurrentCar';
chargertimeconstr = sum(x,1) <= charger;
prob = optimproblem;
prob.Objective = -1*sum(sum(x));
prob.Constraints.laderconstr = chargerconstr;
prob.Constraints.autoladungconstr = carcapconstr;
prob.Constraints.autozeitconstr = cartimeconstr;
prob.Constraints.ladezeitconstr = chargertimeconstr;
opts = optimoptions('intlinprog','Display','off','PlotFcn',@optimplotmilp);
[sol,fval,exitflag,output] = solve(prob,'options',opts);
As a result i get the matrix
0 0 10
0 20 0
11 0 0
0 2 20
Looking at row 4 i now would like to sanction the use of multiple chargers (if not really necessary). My idea would be to tell the car it need like 10 minutes to switch between chargers.
How would i do this?
I already tried implementing binary variables into the model, but without success.

回答(1 个)

prabhat kumar sharma
Hello Niklas,
To limit cars to using one charger at a time, introduce binary variables to indicate charger usage. Here's a streamlined approach:
  1. Binary Variables: Create y(i,j) to show if car i uses charger j.
  2. Constraints:
  • Link x(i,j) (charging amount) to y(i,j) using a large constant (bigM): x(i,j) <= bigM * y(i,j).
  • Ensure each car uses at most one charger: sum(y, 2) <= 1.
3. Objective: Maximize charging without changes.
charger = [11, 22, 50];
cars = [10, 20, 30, 40];
maxCurrentCar = [11, 22, 11, 22];
x = optimvar('x', length(cars), length(charger), 'LowerBound', 0);
y = optimvar('y', length(cars), length(charger), 'Type', 'integer', 'LowerBound', 0, 'UpperBound', 1);
bigM = max(charger);
prob = optimproblem;
prob.Objective = -sum(sum(x));
prob.Constraints.chargerconstr = sum(x, 1) <= charger;
prob.Constraints.carcapconstr = sum(x, 2) <= cars';
prob.Constraints.cartimeconstr = sum(x, 2) <= maxCurrentCar';
prob.Constraints.useChargerConstr = x <= bigM * y;
prob.Constraints.oneChargerPerCarConstr = sum(y, 2) <= 1;
opts = optimoptions('intlinprog', 'Display', 'off', 'PlotFcn', @optimplotmilp);
[sol, fval, exitflag, output] = solve(prob, 'options', opts);
disp(sol.x);
I hope it helps!

类别

Help CenterFile Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息

产品


版本

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by