Rory McDonald
Rory McDonald

Reputation: 273

Pyoptsparse 'signal handler' error when using IPOPT

Traceback (most recent call last):
  File "/home/rory/Documents/coloring_test/problemSolver.py", line 151, in <module>
    p.run_driver()
  File "/home/rory/.local/lib/python3.6/site-packages/openmdao/core/problem.py", line 663, in run_driver
    return self.driver.run()
  File "/home/rory/.local/lib/python3.6/site-packages/openmdao/drivers/pyoptsparse_driver.py", line 493, in run
    signal.signal(sigusr, self._signal_cache)
  File "/usr/lib/python3.6/signal.py", line 47, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
TypeError: signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object

There are a couple of situations where I see this error:

  1. I receive this error when I run_driver() using IPOPT with mumps on my Dymos problem which I haven't managed to get working yet.

  2. Whenever I run run_driver() while using IPOPT with HSL instead of mumps for any dynamics problem, including the basic examples from Dymos.

Preceding this error is the list of constraints at each node, all of which have a value of 0.00 (their reference value).

   1251  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100
   1252  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100
   1253  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100
   1254  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100

No iterations appear to be solved by IPOPT.

Also, as a side question, I see that HSL has many solvers such as ma27, ma77 within the install directory. How do I specify which one is being installed, or if they all are, which is being used by IPOPT?

Upvotes: 0

Views: 104

Answers (1)

Kenneth Moore
Kenneth Moore

Reputation: 2202

That error is caused by a feature that allows you to send a termination signal from the OS and get a clean exit from SNOPT. That feature seems to cause problems with some operating systems, and we should really turn it off by default.

You can work around the problem by setting:

  prob.driver.options['user_terminate_signal'] = None

That should get around the exception. I don't know the answer to the IPOPT side question though.

Upvotes: 3

Related Questions