Я не нашел этот конкретный c вопрос, заданный здесь. Я использую scipy для оптимизации линейной программы, которая имеет несколько переменных ... не только 3 или 4 (показано в большинстве примеров / документации). В примерах, которые я видел, число переменных невелико, поэтому границы для каждой переменной могут быть буквально перечислены. Тем не менее, у меня есть матрица переменных - в частности, верхний три angular из 12 * 12, для которого мне нужно указать границы. Я не смог придумать способ сделать это.
import numpy as np
#matrix of values that will be "changed" by solver to optimize:
x = np.triu(np.ones((12, 12)),1)
#bounds:
bnds = (0,100)
Мне нужно создать одинаковые границы для всех элементов x.
Мне нужно убедиться, что способ создания границ принят процедурой оптимизации scipy.
Я попробовал следующее:
mxbnds = np.ones((12,12),dtype=object)
for i in range(0,len(schedule0)):
for j in range(0,len(schedule0)):
mxbnds[i,j] = bnds
Но когда я пытаюсь оптимизировать с помощью:
import scipy.optimize as opt
sol = opt.minimize(val, schedule0, method='SLSQP', bounds= mxbnds)
Я получаю ошибку
"ValueError: установка элемента массива с последовательностью"
Я думаю, что это связано с тем, как я создаю границы, это кажется неправильным. Любая помощь будет оценена. Я могу предоставить меньшую воспроизводимую версию проблемы, включая целевую функцию, если это необходимо. Я надеюсь, что кто-то делал это раньше и мог указать на то, что я делаю неправильно, просто посмотрев, как я создаю границы. Спасибо!
Больше попыток: Я только что попробовал:
bnds = [[bnds for j in x] for i in x]
Это создает bnds, но теперь я получаю еще одну ошибку:
IndexError: SLSQP Error: the length of bounds is not compatible with that of x0.
Кажется, немного прогресс кажется ......