Я пытаюсь запустить код для сложной модели, который был переведен с GAMS на Python (DICE16). Требуются pyomo и ipopt, но есть проблема с ipopt на Windows 10 (64-битная), поскольку conda-forge устанавливает только версию 3.10.1, которая не работает с моим кодом:
ERROR: Solver (ipopt) returned non-zero return code (1)
ERROR: Solver log: Ipopt 3.11.1: halt_on_ampl_error=yes acceptable_tol=1e-08
constr_viol_tol=1e-10 max_iter=2000 bound_frac=0.1
**************************************************************************
**** This program contains Ipopt, a library for large-scale nonlinear
optimization.
Ipopt is released as open source code under the Eclipse Public License
(EPL).
For more information visit http://projects.coin-or.org/Ipopt
**************************************************************************
****
NOTE: You are using Ipopt by default with the MUMPS linear solver.
Other linear solvers might be more efficient (see Ipopt
documentation).
This is Ipopt version 3.11.1, running with linear solver mumps.
Number of nonzeros in equality constraint Jacobian...: 6445 Number of
nonzeros in inequality constraint Jacobian.: 0 Number of nonzeros
in Lagrangian Hessian.............: 984
Error evaluating constraint 901: can't compute 0/0.
---------------------------------------------------------------------------
ApplicationError Traceback (most recent call last)
<ipython-input-5-759fa6ac1706> in <module>
3 with open("DICE16_PF.py") as f:
4 code = compile(f.read(), "DICE16_PF.py", 'exec')
----> 5 exec(code)
6
~\Desktop\VKR\DICE16_PF.py in <module>
575 solver.options['bound_frac'] = 0.1
576 #solver.options['bound_relax_factor'] = 0
--> 577 results = solver.solve(m)#,tee=True)
578 print(sorted(m.t))
579 print(m.OBJ.expr.value)
~\Anaconda3\lib\site-packages\pyomo\opt\base\solvers.py in solve(self, *args, **kwds)
598 logger.error("Solver log:\n" + str(_status.log))
599 raise pyutilib.common.ApplicationError(
--> 600 "Solver (%s) did not exit normally" % self.name)
601 solve_completion_time = time.time()
602 if self._report_timing:
ApplicationError: Solver (ipopt) did not exit normally
Этот код работает на Linux или IOS, так как они имеют последние версии IPOPT, поэтому код не включает деление на 0.
Я пытался использовать IPOPT через NEOS сервер, но он тоже не работал:
NameError Traceback (most recent call last)
<ipython-input-3-759fa6ac1706> in <module>
3 with open("DICE16_PF.py") as f:
4 code = compile(f.read(), "DICE16_PF.py", 'exec')
----> 5 exec(code)
6
~\Desktop\VKR\DICE16_PF.py in <module>
575 # solver.options['bound_frac'] = 0.1
576 # #solver.options['bound_relax_factor'] = 0
--> 577 results = solver.solve(m)#,tee=True)
578 print(sorted(m.t))
579 print(m.OBJ.expr.value)
NameError: name 'solver' is not defined
Я также пытался изменить имя решателя на IPOPT, Ipopt или даже conopt и bonmin, но проблема остается той же.
Вот часть кода, где я использую Ipopt (или conopt): часть кода
Что я должен сделать, чтобы это исправить? Я новичок во всем этом, поэтому извините, если мой вопрос звучит глупо.