我正在使用GEKKO
解决非线性编程问题。我的目标是将GEKKO
的性能与其他性能进行比较,因此,我想确保从GEKKO
的性能中获得最大的收益。
有n个二进制变量,每个变量从区间[[[0,1]中分配一个权重。每个约束都是线性的。目标函数是非线性的:它是非零变量的权重的乘积,目标是使乘积最大化。
我首先将目标函数指定为m.Obj(-np.prod([1 - variables[i] + weights[i] * variables[i] for i in range(len(variables))]))
但是我会碰到APM model error: string > 15000 characters
。所以我使用if3
函数切换为辅助变量,如[]
aux_variables = [m.if3(variables[i], weights[i], 1) for i in range(len(variables))] m.Obj(-np.prod(aux_variables))
我要手动设置的唯一全局参数在下面的代码中。
# initialize model m = GEKKO(remote=False) # set global variables m.options.SOLVER = 1 # APOPT solver # "APOPT is an MINLP solver" # "APOPT is also the only solver that handles Mixed Integer problems." m.options.IMODE = 3 # steady state optimization m.solver_options = ['minlp_maximum_iterations 500', \ # minlp iterations with integer solution 'minlp_max_iter_with_int_sol 10', \ # treat minlp as nlp 'minlp_as_nlp 0', \ # nlp sub-problem max iterations 'nlp_maximum_iterations 50', \ # 1 = depth first, 2 = breadth first 'minlp_branch_method 1', \ # maximum deviation from whole number 'minlp_integer_tol 0.05', \ # covergence tolerance 'minlp_gap_tol 0.01'] # initialize variables variables = m.Array(m.Var, (number_of_vars), lb=0, ub=1, integer=True) # set initial values for var in variables: var.value = 1
还有什么,如果有的话,就全局参数和目标函数的制定而言,我可以针对该特定问题优化问题:
GEKKO
的性能吗?同时,我希望
GEKKO
产生不错的结果。我正在使用GEKKO解决非线性编程问题。我的目标是将GEKKO性能与其他性能进行比较,因此,我想确保从GEKKO获得最佳效果...