Как выполнить оптимизацию векторов в GekkoPython

Программы на Python
Гость
Как выполнить оптимизацию векторов в Gekko

Сообщение Гость »

Я пытаюсь использовать Gekko для оптимизации по времени (вектору) для создания расписаний на основе нескольких ограничений, а именно цены и количества раз, которое может произойти событие (скажем, мы ограничиваем его до 5 на x7 ниже).< /p>
Я получаю следующую ошибку при вызове суммы: TypeError: x должен быть списком параметров, переменных или выражений GEKKO в Python.
Даже если я удалю сумму, я также получу следующую ошибку: TypeError: @error: Model Expression
*** Ошибка в синтаксисе функциональной строки: Недопустимый элемент: ame
Следующие переменные являются векторами длиной 42:
sp,
base,
neg_ln,
Следующие переменные являются значениями масштабатора (длина 1):min,
max,
co_ln,
co1,
Я могу заставить это работать, посмотрев только на 1 строку из 42 строк за раз, чтобы оптимизировать x1, но я не могу понять, как перенести это на несколько строк за один раз, ограничивая частоту (x7). Любые рекомендации приветствуются.
m = GEKKO(server='XXX', remote=False)
m.options.IMODE = 2
m.options.MAX_ITER = 1000

#initialize variables
x1, x2, x3, x4, x5, x6, x7 = [m.Var() for i in range(7)]

x1.value = 1
x2.value = 1
x3.value = 1
x4.value = 0
x5.value = 0
x6.value = 0
x7.value = 1

neg_ln = m.Intermediate(-m.log(x1/sp))

vol1 = m.Intermediate(co1+ base + (neg_ln*co_ln))
vol2 = m.Intermediate(co2+ base + (neg_ln*co_ln))
vol3 = m.Intermediate(co3+ base + (neg_ln*co_ln))
vol4 = m.Intermediate(base + (neg_ln*co_ln))

total_vol = m.Intermediate((
(m.max2(0,base*(m.exp(vol1)-1)) * x3 +
m.max2(0,base*(m.exp(vol2)-1)) * x4 +
m.max2(0,base*(m.exp(vol3)-1)) * x5 +
m.max2(0,base*(m.exp(vol4)-1)) * x6) + base) * x7)

m.Equation(x3+x4+x5+x6 == 1)
m.Equation(x3+x4+x5+x6 >= 0)
m.Equation(m.sum(x7)= min)
m.Equation(x1

Подробнее здесь: https://stackoverflow.com/questions/781 ... s-in-gekko

Вернуться в «Python»