У меня возникла проблема с оптимизацией использования библиотеки pyscipopt в качестве основы для моего кода Python. Во время оптимизации код находится в трех разных состояниях: a, b и c. Все три из них являются двоичными и связаны между собой a + b + c == 1, поэтому только один из них может быть 1. Теперь дело в том, что если c == 1, мне нужно посчитать его с помощью оператора IF, поскольку в конце каждого дня оптимизации число c == 1 напрямую влияет на саму структуру оптимизации, и это нужно делать внутри оптимизации, поскольку это значительно меняет результат, поэтому я не могу дождаться конца оптимизация для получения количества раз c == 1. Есть ли какой-нибудь способ в Python, который я бы предпочел, или, может быть, в C, поскольку я знаю, что там больше возможностей, но лично я никогда не занимался оптимизацией.
Я пробовал использовать ChatGPT уже 2 дня, и он признает проблему, но не может дать ее решения, поскольку просто переформулирует код с той же самой проблемой в конце. Я попробовал Big-M (не могу извлечь значение оптимизации для прямого использования в операторе IF) и полностью обошел его, но в конце концов я понял, что я слишком глуп и не самый большой поклонник кодирования, чтобы начинать по-настоящему глубоко погружаться в это. это, поэтому я хотел знать, возможно ли это вообще.
Текущий код:
Целевая функция: оптимизация прибыли
model.setObjective(quicksum(data['price'][t] * Discharge[t] - data['price'][t] * charge[t] за t в соответствующих_периодах), "максимизировать")< /p>
for t in time_ periods: # почасовые данные в наборе данных за 30 лет
d = t // period_per_day # Определяет день для текущего периода
if t == 0:
model.addCons(soc[t] == initial_soc)
elif t in relevant_periods:
# times in which desicions are made, other times always standby
model.addCons(a[t] + b[t] + c[t] == 1)
if t in relevant_periods_min and c < 1:
model.addCons(charge[t] == a[t] * dod_adjusted / efficiency)
time_limit = t
e += 1
age +=1
elif t in relevant_periods_max and t < (time_limit + 24) and c < 1:
model.addCons(discharge[t] == b[t] * dod_adjusted * efficiency)
e += 1
age +=1
else:
standby += 1
model.addCons(soc[t] == soc[t - 1] + (charge[t] * efficiency - discharge[t] / efficiency) / battery_capacity)
else:
# standy outside relevant periods
model.addCons(soc[t] == soc[t - 1])
standby += 1
Подробнее здесь: https://stackoverflow.com/questions/791 ... he-optimiz
Можно ли использовать значение одной из переменных оптимизации во время оптимизации в операторе IF? [закрыто] ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сравнение нескольких переменных посредством логического И в операторе <=>
Anonymous » » в форуме C++ - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как напечатать значения нескольких переменных в одном операторе Console.WriteLine()?
Anonymous » » в форуме C# - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-