Нахождение максимума переменной оптимизации в MATLAB - PullRequest
0 голосов
/ 23 апреля 2020

Я смотрю на проблему «Обязательство подразделения» (определение того, когда и когда следует генерировать устройства, чтобы снизить затраты на эксплуатацию). Теперь у меня есть три переменные оптимизации:

%Amount of power generated in an hour by a plant
power = optimvar('power',nHours,plant,'LowerBound',0,'UpperBound',maxGenConst);
%Indicator if plant is operating during an hour 
isOn = optimvar('isOn',nHours,actual_plant,'Type','integer','LowerBound',0,'UpperBound',1);
%Indicator if plant is starting up during an hour
startup = optimvar('startup',nHours,actual_plant,'Type','integer','LowerBound',0,'UpperBound',1);

И есть специфическое ограничение c, которое я хотел бы включить. Первоначально это было ограничение:

powerprob.Constraints.spinningReserve = sum((maxPowConst.*isOn),2) >= Load + SR;

Где Load и SR (запас вращения) были постоянными значениями. Я успешно запустил симуляцию (то есть нашел решение, связанное с минимальной стоимостью) с этим ограничением. Тем не менее, сейчас я пытаюсь заменить переменную SR емкостью самого большого подразделения, зафиксированного в любой момент времени. Вот что я попробовал:

powerprob.Constraints.spinningReserve = sum((maxPowConst.*isOn),2) >= Load + max((maxPowConst.*isOn),2);

Однако я получаю ошибку, используя max, поскольку аргумент для функции max является типом данных оптимизации. Функция max не может использоваться с переменными оптимизации в соответствии с документацией MATLAB. Я ищу какую-то функцию (я еще не нашел подходящей) или какую-то альтернативу для включения этого ограничения.

...