Добро пожаловать на ТАК!Как отметил @Erwin, вы не можете использовать переменную решения для индексации в списке или массиве Python.
Однако вы можете использовать MILP через pulp
библиотека для выбора из списка возможных значений.
Есть несколько способов сделать это - один из них - ввести список двоичных переменных, чтобы указать, выбран ли каждый из параметров (переменная принимает значение 1
) или нет (переменная принимает значение 0
), и следите за тем, чтобы точно один из них был истинным.
Используя этот подход, ваша проблема станет следующей.Обратите внимание, что choose_vars
- это список двоичных переменных решения, которые отслеживают, какой из списка вариантов выбран, а chosen_value
- это непрерывная переменная, которая ограничена выбранным значением.
from pulp import *
turbiinit_lista = [1.1,2.2,3.3,4.4]
n = len(turbiinit_lista)
N = range(n)
prob = LpProblem("Vesivoima", LpMaximize)
choose_vars = LpVariable.dicts("choose_%s", N, 0, 1, cat="Integer")
choosen_value = LpVariable("choosen")
prob += (10*choosen_value-50-(350*choosen_value))
prob += choosen_value == lpSum([turbiinit_lista[i]*choose_vars[i] for i in N])
prob += lpSum([choose_vars[i] for i in N]) == 1
prob.writeLP("Vesivoima.lp")
prob.solve()
choose_vars_soln = [choose_vars[i].varValue for i in N]
print("choose_vars_soln: " + str(choose_vars_soln))
print("choosen_value: " + str(choosen_value.varValue))
, котораявыходы:
choose_vars_soln: [1.0, 0.0, 0.0, 0.0]
choosen_value: 1.1