python scipy.optimize.minimize определяют ограничения - PullRequest
0 голосов
/ 07 ноября 2018

Может быть, довольно конкретный вопрос Я использую функцию оптимизации scipy, чтобы получить новое значение для семи переменных. семь значений задаются массивом x0 для начального ввода. a, b, c, d на самом деле int значение.

При выполнении полного кода и функции минимизации все работает отлично.

Если я распечатываю, как мои семь переменных эволюционируют после каждой итерации, я вижу, что a, b, c, d преобразуется в float, чтобы изменить его на небольшой шаг.

Хотя я все еще добираюсь до своего окончательного результата, было бы замечательно, если бы я мог указать при некотором ограничении, что эти 4 переменные являются только целочисленными, поэтому функция оптимизации будет выполнять меньше итераций, а не пытаться устанавливать переменные a, b,c ,d до 8.00000164 или другой плавающей запятой, но непосредственно до 6,7, 8, 9, 10 ... например

Я не уверен, что это вообще возможно, но если кто-нибудь знает, как это сделать, я буду счастлив узнать.

Ниже приведена важная часть кода, показывающая, как настроена функция минимизации.

a = 8
b = 23
c = 54
d = 89

... some code before and after

# FUNCTION - SOLVER CONSTRAINTS
def solver_constraint_1(t):
  return t[1] - t[0]
def solver_constraint_2(t):
  return t[2] - t[1]
def solver_constraint_3(t):
  return t[3] - t[2]

... some code before and after

x0 = [a, b, c, d, 1.0, 1.0, 1.0]

x_bounds = [[0, 20], [10, 60], [20, 80], [60, 100], [0.25, 2.5], [0.25, 2.5], [0.25, 2.5]]

x_cons = ({'type': 'ineq', 'fun': solver_constraint_1}, 
          {'type': 'ineq', 'fun': solver_constraint_2},    
          {'type': 'ineq', 'fun': solver_constraint_3})

solution = minimize(objective, x0, method='SLSQP', bounds=x_bounds, constraints=x_cons, options={'ftol': 1e-8, 'maxiter': 1000, 'disp': True})

1 Ответ

0 голосов
/ 07 ноября 2018

Чтобы дать краткий ответ и с помощью @kazemakase в ответе выше, просто нелегко исправить размер шага, чтобы он был целым в функции минимизации. Кроме того, выполнение integer programming на самом деле является гораздо более сложной задачей, чем линейное программирование

...