Может быть, довольно конкретный вопрос
Я использую функцию оптимизации 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})