peterdsharpe / AeroSandbox

Aircraft design optimization made fast through modern automatic differentiation. Composable analysis tools for aerodynamics, propulsion, structures, trajectory design, and much more.
https://peterdsharpe.github.io/AeroSandbox/
MIT License
690 stars 111 forks source link

Problem running the optimization example #3

Closed chiefenne closed 4 years ago

chiefenne commented 4 years ago

Describe the bug When I run vlm2_tapered_wing_optimization.py, I get following numpy error thrown: TypeError: invalid data type for einsum. The function is calculate_Vij (line 1597) in aerodynamics.py

Traceback (most recent call last): File "examples/vlm2_tapered_wing_optimization.py", line 91, in bounds=[(0.001, 1), (0, 10)] File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\scipy-1.3.0-py3.7-win-amd64.egg\scipy\optimize_minimize.py", line 608, in minimize constraints, callback=callback, options) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\scipy-1.3.0-py3.7-win-amd64.egg\scipy\optimize\slsqp.py", line 423, in _minimize_slsqp g = append(fprime(x), 0.0) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\scipy-1.3.0-py3.7-win-amd64.egg\scipy\optimize\optimize.py", line 326, in function_wrapper return function((wrapper_args + args)) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\autograd-1.2-py3.7.egg\autograd\wrap_util.py", line 20, in nary_f return unary_operator(unary_f, x, nary_op_args, nary_op_kwargs) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\autograd-1.2-py3.7.egg\autograd\differential_operators.py", line 24, in grad vjp, ans = _make_vjp(fun, x) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\autograd-1.2-py3.7.egg\autograd\core.py", line 10, in make_vjp end_value, end_node = trace(start_node, fun, x) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\autograd-1.2-py3.7.egg\autograd\tracer.py", line 10, in trace end_box = fun(start_box) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\autograd-1.2-py3.7.egg\autograd\wrap_util.py", line 15, in unary_f return fun(*subargs, kwargs) File "examples/vlm2_tapered_wing_optimization.py", line 53, in objective_function ap = get_ap(inputs) File "examples/vlm2_tapered_wing_optimization.py", line 47, in get_ap ap.run(verbose=False) File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\aerosandbox-0.1.5-py3.7.egg\aerosandbox\aerodynamics.py", line 23, in wrapper File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\aerosandbox-0.1.5-py3.7.egg\aerosandbox\aerodynamics.py", line 785, in run File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\aerosandbox-0.1.5-py3.7.egg\aerosandbox\aerodynamics.py", line 1307, in setup_geometry File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\aerosandbox-0.1.5-py3.7.egg\aerosandbox\aerodynamics.py", line 23, in wrapper File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\aerosandbox-0.1.5-py3.7.egg\aerosandbox\aerodynamics.py", line 1597, in calculate_Vij File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\autograd-1.2-py3.7.egg\autograd\tracer.py", line 48, in f_wrapped return f_raw(*args, *kwargs) File "<__array_function__ internals>", line 6, in einsum File "C:\anaconda3\envs\AeroSandbox\lib\site-packages\numpy-1.17.0rc1-py3.7-win-amd64.egg\numpy\core\einsumfunc.py", line 1356, in einsum return c_einsum(operands, kwargs) TypeError: invalid data type for einsum

peterdsharpe commented 4 years ago

Ah! Found what was causing this: seems like there's an issue within one of the dependencies, autograd, that is causing this (specifically in how autograd.numpy.dstack() is implemented). I'll forward this issue on to the autograd devs.

In the meantime, I've replaced this line with autograd.numpy.stack() with the "axis=2" argument, which fixes the result you're seeing!

Commit should be up in a few minutes here!

peterdsharpe commented 4 years ago

Update: Fixed! Thank you!

chiefenne commented 4 years ago

I appreciate your work and look forward to the upcoming planned features. Thanks a lot for this nice software.