Лучший способ оптимизации для дискретных входных переменных - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу определить функцию, которая ищет два параметра, скажем, A и B, чтобы их произведение было равно или больше заданного значения, с условием, что A и B кратны 5. Кроме того, я бы как это отношение A / B равно или больше, чем данное отношение ввода.

Вот что у меня есть:

Функция цели: product(x) Ограничения: product(x) => required_product; A % 5 = 0; B % 5 = 0; A / B => input_ratio

def pair_designer(required_product, input_ratio):
x0 = np.asarray([5, 5])
cons = [{'type': 'eq', 'fun': lambda x: x[0] % 5},
        {'type': 'eq', 'fun': lambda x: x[1] % 5},
        {'type': 'ineq', 'fun': lambda x: product(x) - required_product},
        {'type': 'ineq', 'fun': lambda x: (np.max(x) / np.min(x)) - input_ratio},
        ]
v = minimize(product, x0=x0, method='SLSQP', constraints=cons, options={'ftol': 1e-10})
return v.x

def product(x):
    return x[0] * x[1]

print(pair_designer(1000, 2))

Код работает для первого ограничения, но полностью завершается ошибкой при добавлении второго и третьего ограничений. Можете ли вы помочь мне решить эту проблему? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...