Я пытаюсь использовать GLPK для решения задачи оптимизации, для которой у меня есть кусочная функция (2 подфункции). Короче говоря, проблема заключается в минимизации затрат на электроэнергию в окружающей среде путем планирования работы определенных (электрических) приборов. Также рассматривается производство энергии, поэтому моя целевая функция сводится к минимуму следующей функции:
Идея состоит в том, что для каждого момента balance [i] будет хранить общий энергетический баланс (то есть разницу между потребляемой и произведенной энергией). Следовательно, если balance [i]> = 0, количество потребляемой энергии превышает производство, и нам нужно покупать энергию из сети; в противном случае производство превышает потребности, и мы можем продавать излишки энергии в сеть.
Для каждого момента времени значение баланса [i] будет зависеть от производства энергии, фиксированного потребления энергии (оба были известны ранее, поэтому проблемных переменных не было) и от потребления энергии запланированными приборами (рассчитывается как функция переменных задачи).
Пытаясь смоделировать это в GLPK, я ввел двоичную переменную, которая для каждого момента i сообщает сигнал balance [i]. Идея состоит в том, чтобы записать целевую функцию как:
минимизировать объект: сумма {i в k} (z [i] * баланс [i] * покупка + (1-z [i]) * баланс [i] * продажа)
Таким образом, я хочу, чтобы z [i] было 1, когда balance [i]> = 0, и z [i] было 0 в противном случае (balance [i] ‹0).
Как я могу определить ограничения на z [i]? Я знаю, что в GLPK можно определять условные ограничения, но, насколько мне известно, я не могу писать:
s.t. zUpperi {я в k: баланс [я]> = 0}: z [я] = 1;
потому что balance [i] зависит от переменных задачи ... Есть ли другие способы выразить это ограничение? Или это вообще невозможно в ГЛПК?