Optimization - Python and Scypi.minimize -


i find position [x,y,z] of several elements in order have global center of gravity @ desired point.

to so, defined 2 classes:

  • elements store element's mass , position
  • plane takes list of element , can compute center of gravity according set of element.

i defined error function compute difference between actual global center of gravity plane's set of elements , desired center of gravity.

to minimize function, wanted use scypi.minimize function nelder-mead simplex algorithm.

i put each element's coordinate x0 , pass x0 , error function parameter minimize.

i received error don't understand.:

valueerror: setting array element sequence.  

moreover according want do, may have better idea solve/fix problem?

here code :

import numpy np scipy.optimize import minimize  class plane(object):   def __init__(self, elts):     self.elements=elts     self.totalmasse=self.calc_masse(self.elements)      self.cdg = self.calc_cdg()    def __getitem__(self):     return self.elements,self.totalmasse    def calc_masse(self,elements):     lm=[]     el in elements:       lm.append(el.masse)     return sum(lm)    def calc_cdg(self):     xcdg=0     ycdg=0     zcdg=0     el in self.elements:       xcdg+=el.masse*el.position[0]/self.totalmasse       ycdg+=el.masse*el.position[1]/self.totalmasse       zcdg+=el.masse*el.position[2]/self.totalmasse     return [xcdg,ycdg,zcdg]  class element(object):   def __init__(self, mass, pos):     self.masse=mass     self.position=pos    def __getitem__(self):     return self.masse, self.position    def calculerreurposcdg(cdg):     global positioncdgconsigne     return [positioncdgconsigne[0]-cdg[0], positioncdgconsigne[1]-cdg[1],positioncdgconsigne[2]-cdg[2]]  battery = element(0.5,[0.5,1,1]) motor = element(0.2,[1,1,0]) servol = element(0.01,[-0.7,1,0]) servor = element(0.01,[0.7,1,0]) reciever = element(0.01,[0.1,1,1])  elements=[battery, motor, servol, servor, reciever]  positioncdgconsigne=[1,1,1]  plane1=plane(elements)  x0=np.array([]) el in elements:   x0= np.append(x0,[el.position])  res=minimize(calculerreurposcdg,x0,method='nelder-mead', options={'xtol':1e-8,'disp':true}) 

your target function returns list, while minimize expects scalar. need set problem first , specify mean minimizing vector-valued function.


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -