gpkit: DimensionalityError when trying to use solution array as initial guess for SP solve
Less of an issue, and more of a question on the new corrected syntax. 2 different causes of DimensionalityError:
---------------------------------------------------------------------------
DimensionalityError Traceback (most recent call last)
/Users/philippekirschen/Documents/MIT/Research/GPjet/gpjet/vtail/vtail.py in <module>()
175
176 if __name__ == "__main__":
--> 177 VerticalTail().test()
/Users/philippekirschen/Documents/MIT/Research/GPjet/gpjet/vtail/vtail.py in test(self)
151
152 npt.assert_almost_equal(sol('\\Delta x_{trail}'), sol('c_{root}')
--> 153 + sol('\\Delta x_{lead}'), decimal=4)
154 npt.assert_almost_equal(sol('\\Delta x_{lead}') + sol('z_{\\bar{c}}')
155 *sol('\\tan(\\Lambda_{LE})')
/Users/philippekirschen/anaconda/lib/python2.7/site-packages/numpy/testing/utils.pyc in assert_almost_equal(actual, desired, decimal, err_msg, verbose)
487 except (NotImplementedError, TypeError):
488 pass
--> 489 if round(abs(desired - actual), decimal) != 0 :
490 raise AssertionError(_build_err_msg())
491
/Users/philippekirschen/anaconda/lib/python2.7/site-packages/pint/quantity.pyc in __float__(self)
280 if self.dimensionless:
281 return float(self._convert_magnitude_not_inplace(UnitsContainer()))
--> 282 raise DimensionalityError(self.units, 'dimensionless')
283
284 def __complex__(self):
DimensionalityError: Cannot convert from 'meter' to 'dimensionless'
[philippekirschen@dhcp-18-189-101-248 aircraft]$ ipython aircraft.py
Beginning signomial solve.
The 'setup' method of this model had an error.
---------------------------------------------------------------------------
DimensionalityError Traceback (most recent call last)
/Users/philippekirschen/Documents/MIT/Research/GPjet/gpjet/aircraft/aircraft.py in <module>()
86
87 if __name__ == "__main__":
---> 88 Aircraft()#.test()
89
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/model.pyc in __init__(self, cost, constraints, substitutions, *args, **kwargs)
84 extended_args.extend(args)
85 name = kwargs.pop("name", self.__class__.__name__)
---> 86 setup = self.setup(*extended_args, **kwargs)
87 except:
88 print("The 'setup' method of this model had an error.")
/Users/philippekirschen/Documents/MIT/Research/GPjet/gpjet/aircraft/aircraft.py in setup(self)
78 init2[newkey] = value
79
---> 80 aircraft.localsolve(x0=init2)
81
82 return aircraft
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/model.pyc in localsolve(self, solver, verbosity, skipsweepfailures, *args, **kwargs)
383 with SignomialsEnabled():
384 return self._solve("sp", solver, verbosity, skipsweepfailures,
--> 385 *args, **kwargs)
386 except ValueError as err:
387 if err.message == ("SignomialPrograms must contain at least one"
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/model.pyc in _solve(self, programType, solver, verbosity, skipsweepfailures, *args, **kwargs)
500 self.program, solvefn = form_program(programType, signomials,
501 verbosity=verbosity)
--> 502 result = solvefn(*args, **kwargs)
503 solution.append(parse_result(result, constants, beforesubs))
504 solution.program = self.program
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/signomial_program.py in localsolve(self, solver, verbosity, x0, rel_tol, iteration_limit, *args, **kwargs)
115 appear to be converging, you may wish to increase the iteration limit by
116 calling .localsolve(..., iteration_limit=NEWLIMIT).""" % len(self.gps))
--> 117 gp = self.step(x0, verbosity=verbosity-1)
118 self.gps.append(gp) # NOTE: SIDE EFFECTS
119 try:
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/signomial_program.py in step(self, x0, verbosity)
169 posy_approx = p
170 else:
--> 171 posy_approx = p/n.mono_lower_bound(x0)
172 # posy_approxs.append(posy_approx)
173 # posy_approx = 1/posy_approx
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/nomials.pyc in mono_lower_bound(self, x_0)
484 Monomial
485 """
--> 486 return self.mono_approximation(x_0)
487
488
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/nomials.pyc in mono_approximation(self, x_0)
172 x_0 = get_constants(self, x_0)
173 exp = HashVector()
--> 174 psub = self.sub(x_0)
175 if psub.varlocs:
176 raise ValueError("Variables %s remained after substituting x_0=%s"
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/nomials.pyc in sub(self, substitutions, val, require_positive)
206 Returns substituted nomial.
207 """
--> 208 _, exps, cs, _ = substitution(self, substitutions, val)
209 return Signomial(exps, cs, require_positive=require_positive)
210
/Users/philippekirschen/Documents/MIT/Research/GPkit/gpkit/gpkit/substitution.pyc in substitution(nomial, substitutions, val)
158 if isinstance(sub, Numbers):
159 if sub != 0:
--> 160 cs_[i] *= sub**x
161 else: # frickin' pints bug. let's reimplement pow()
162 if x > 0:
/Users/philippekirschen/anaconda/lib/python2.7/site-packages/pint/quantity.pyc in __setitem__(self, key, value)
1030 extra_msg='. Assign a quantity with the same dimensionality or '
1031 'access the magnitude directly as '
-> 1032 '`obj.magnitude[%s] = %s`' % (key, value))
1033 self._magnitude[key] = factor.magnitude
1034 else:
DimensionalityError: Cannot convert from '15253.5801059 newton ** 2' to 'newton'. Assign a quantity with the same dimensionality or access the magnitude directly as `obj.magnitude[2] = 15253.5801059 newton ** 2`
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Comments: 21 (19 by maintainers)
I actually haven’t tested it with the second case, but when I do and if it works I will close.