PROPT

PROPT
Utvecklare Tomlab Optimization Inc.
Stabil frisättning
7.8 / 16 december 2011 ( 2011-12-16 )
Operativ system TOMLAB - OS-stöd
Typ Teknisk beräkning
Licens Proprietär
Hemsida PROPT produktsida

PROPT MATLAB Optimal Control Software är en ny generations plattform för att lösa tillämpad optimal styrning (med ODE eller DAE -formulering) och problem med parameteruppskattning .

Plattformen utvecklades av MATLAB Programming Contest Winner, Per Rutquist 2008. Den senaste versionen har stöd för binära och heltalsvariabler samt en automatiserad skalningsmodul.

Beskrivning

PROPT är en kombinerad modellerings- , kompilerings- och lösamotor, byggd på TomSym -modelleringsklassen, för generering av mycket komplexa optimala kontrollproblem. PROPT använder en pseudospektral kollokationsmetod (med Gauss- eller Chebyshev-punkter) för att lösa optimala kontrollproblem. Detta innebär att lösningen har formen av ett polynom och detta polynom uppfyller DAE och vägbegränsningarna vid samlokaliseringspunkterna.

Generellt har PROPT följande huvudfunktioner:

  • Beräkning av de konstanta matriserna som används för differentieringen och integrationen av polynomen som används för att approximera lösningen på banaoptimeringsproblemet .
  • Källomvandling för att omvandla användartillförda uttryck till MATLAB-kod för kostnadsfunktionen och begränsningsfunktionen som skickas till en ickelinjär programmeringslösare i TOMLAB . Källtransformationspaketet TomSym genererar automatiskt första och andra ordningens derivator.
  • Funktionalitet för att plotta och beräkna en mängd information för lösningen av problemet.
  • Automatisk detektering av följande:
    • Linjärt och kvadratiskt mål.
    • Enkla gränser, linjära och olinjära begränsningar.
    • Ej optimerade uttryck.
  • Integrerat stöd för icke-släta (hybrid) optimala kontrollproblem.
  • Modul för automatisk skalning av svåra utrymmesrelaterade problem.
  • Stöd för binära och heltalsvariabler, kontroller eller tillstånd.

Modellering

PROPT-systemet använder TomSyms symboliska källtransformationsmotor för att modellera optimala kontrollproblem. Det är möjligt att definiera oberoende variabler, beroende funktioner, skalärer och konstantparametrar:

  
  
     0  
     
       

  
    0    
      0

       toms  tf  toms  t  p  =  tomPhase  (  'p'  ,  t  ,  ,  tf  ,  30  );  x0  =  {  tf  ==  20  };  cbox  =  {  10  <=  tf  <=  40  };  toms  z1  cbox  =  {  cbox  ;  <=  z1  <=  500  };  x0  =  {  x0  ;  z1  ==  };  ki0  =  [  1e3  ;  1e7  ;  10  ;  le-3  ]; 

stater och kontroller

Stater och kontroller skiljer sig bara åt i den meningen att stater behöver vara kontinuerliga mellan faserna.

  
     0

  
       
       tomStates  x1  x0  =  {  icollocate  ({  x1  ==  })};  tomControls  u1  cbox  =  {  -  2  <=  samlokalisera  (  u1  )  <=  1  };  x0  =  {  x0  ;  samlokalisera  (  u1  ==  -  0,01  )}; 

Gräns, väg, händelse och integrerade begränsningar

En mängd olika begränsningar för gränser, vägar, händelser och integrerade begränsningar visas nedan:

            
              
              
       
        
            
           cbnd  =  initial  (  x1  ==  1  );  % Startpunkt för x1  cbnd  =  slutlig  (  x1  ==  1  );  % slutpunkt för x1  cbnd  =  slutlig  (  x2  ==  2  );  % Slutpunkt för x2  pathc  =  samlokalisera  (  x3  >=  0,5  );  % Sökvägsbegränsning för x3  intc  =  {  integrera  (  x2  )  ==  1  };  % Integral begränsning för x2  cbnd  =  final  (  x3  >=  0,5  );  % slutlig händelsebegränsning för x3  cbnd  =  initial  (  x1  <=  2,0  );  % Initial händelsebegränsning x1 

Enfas optimal styrning exempel

Van der Pol Oscillator

Minimera:

Med förbehåll för:

För att lösa problemet med PROPT kan följande kod användas (med 60 samlokaliseringspunkter):

 
    0  


   
 


    0      0
      


       
         
         
          


    0      0


    
         


  


  
  
        toms  t  p  =  tomPhase  (  'p'  ,  t  ,  ,  5  ,  60  );  setPhase  (  p  );  tomStates  x1  x2  x3  tomControls  u  % Initial gissning  x0  =  {  icollocate  ({  x1  ==  ;  x2  ==  1  ;  x3  ==  })  samlokalisera  (  u  ==  -  0,01  )};  % Box begränsningar  cbox  =  {  -  10  <=  icollocate  (  x1  )  <=  10  -  10  <=  icollocate  (  x2  )  <=  10  -  10  <=  icollocate  (  x3  )  <=  10  -  0,3  <=  collocate  (  u  )  <=  1  };  % Gränsbegränsningar  cbnd  =  initial  ({  x1  ==  ;  x2  ==  1  ;  x3  ==  });  % ODEs och sökvägsbegränsningar  ceq  =  samlokalisera  ({  dot  (  x1  )  ==  (  1  -  x2  .^  2  )  .*  x1  -  x2  +  u  dot  (  x2  )  ==  x1  ;  dot  (  x3  )  ==  x1  .^  2  +  x2  .^  2  +  u  .^  2  });  %  Målsättning  =  slutlig  (  x3  );  % Lös problemet  alternativ  =  struct  ;  alternativ  .  name  =  'Van Der Pol'  ;  lösning  =  ezsolve  (  objektiv  ,  {  cbox  ,  cbnd  ,  ceq  },  x0  ,  optioner  ); 

Flerfas optimal styrning exempel

Endimensionell raket med fri sluttid och obestämd fasförskjutning

Minimera:

Med förbehåll för:

Problemet löses med PROPT genom att skapa två faser och koppla ihop dem:

 
  
    0  
      

  

  
  
  
  


  
    
        0
        0


  
         
      
    0   
    0   
    0   
    0   


    0  0
      


     
  
      
      
    
      
      


  


    
      


  
  
     
      toms  t  toms  tCut  tp2  p1  =  tomPhase  (  'p1'  ,  t  ,  ,  tCut  ,  20  );  p2  =  tomPhase  (  'p2'  ,  t  ,  tCut  ,  tp2  ,  20  );  tf  =  tCut  +  tp2  ;  x1p1  =  tomState  (  p1  ,  'x1p1'  );  x2p1  =  tomState  (  p1  ,  'x2p1'  );  x1p2  =  tomState  (  p2  ,  'x1p2'  );  x2p2  =  tomState  (  p2  ,  'x2p2'  );  % Initial gissning  x0  =  {  tCut  ==  10  tf  ==  15  icollocate  (  p1  ,{  x1p1  ==  50  *  tCut  /  10  ;  x2p1  ==  ;})  icollocate  (  p2  ,{  x1p2  ==  50  +  50  *  t  /  100  ;  x2p2  ==  ;})};  % Box-begränsningar  cbox  =  {  1  <=  tCut  <=  tf  -  0,00001  tf  <=  100  <=  icollocate  (  p1  ,  x1p1  )  <=  icollocate  (  p1  ,  x2p1  )  <=  icollocate  (  p2  ,  x1p2  )  <=  icollocate  (  p2 icol  ,  x2p1 )   )};  % Gränsrestriktioner  cbnd  =  {  initial  (  p1  ,{  x1p1  ==  ;  x2p1  ==  ;})  final  (  p2  ,  x1p2  ==  100  )};  % ODEs och sökvägsbegränsningar  a  =  2  ;  g  =  1  ;  ceq  =  {  collocate  (  p1  , {  dot  (  p1  ,  x1p1  )  ==  x2p1  dot  (  p1  ,  x2p1  )  ==  a  -  g  })  collocate  (  p2  , {  dot  (  p2  ,  x1p2  )  ==  x2p2  dot  (  p2  ,  x2p2  )  ==  -  g  })};  % Objektiv  mål  =  tCut  ;  % Länkfaslänk  =  {  slutlig  (  pl  ,  xlpl  )  ==  initial  (  p2  ,  xlp2  )  final  (  pl  ,  x2pl  )  ==  initial  (  p2  ,  x2p2  )}  ;  %% Lös problemet  alternativ  =  struct  ;  alternativ  .  name  =  'One Dim Rocket'  ;  constr  =  {  cbox  ,  cbnd  ,  ceq  ,  länk  };  lösning  =  ezsolve  (  objektiv  ,  constr  ,  x0  ,  optioner  ); 

Exempel på parameteruppskattning

Problem med parameteruppskattning

Minimera:

Med förbehåll för:

I koden nedan löses problemet med ett fint rutnät (10 samlokaliseringspunkter). Denna lösning finjusteras sedan med hjälp av 40 samlokaliseringspunkter:

   
  
   


      
        


  
        0  
    
      

    
       
            0   0
    
               
                 
    

    
           

    
        
           

    
      

    
      
        
      
           

    
       
       
       
       
 toms  t  p1  p2  x1meas  =  [  0,264  ;  0,594  ;  0,801  ;  0,959  ];  tmeas  =  [  1  ;  2  ;  3  ;  5  ];  % Box-begränsningar  cbox  =  {  -  1,5  <=  p1  <=  1,5  -  1,5  <=  p2  <=  1,5  };  %% Lös problemet genom att använda ett successivt större antal samlokaliseringspunkter  för  n  =[  10  40  ]  p  =  tomPhase  (  'p'  ,  t  ,  ,  6  ,  n  );  setPhase  (  p  );  tomStates  x1  x2  % Initial gissning  om  n  ==  10  x0  =  {  p1  ==  ;  p2  ==  };  annars  x0  =  {  p1  ==  p1opt  ;  p2  ==  p2opt  icollocate  ({  x1  ==  x1opt  ;  x2  ==  x2opt  })};  slut  % Gränsrestriktioner  cbnd  =  initial  ({  x1  ==  p1  ;  x2  ==  p2  });  % ODEs och sökvägsbegränsningar  x1err  =  summa  ((  atPoints  (  tmeas  ,  x1  )  -  x1meas  )  .^  2  );  ceq  =  samlokalisera  ({  punkt  (  x1  )  ==  x2  ;  punkt  (  x2  )  ==  1  -  2  *  x2  -  x1  });  % Målet  mål  =  x1fel  ;  %% Lös problemet  alternativ  =  struct  ;  alternativ  .  name  =  'Parameteruppskattning'  ;  alternativ  .  solver  =  'snopt'  ;  lösning  =  ezsolve  (  objektiv  ,  {  cbox  ,  cbnd  ,  ceq  },  x0  ,  optioner  );  % Optimal x, p för startpunkt  x1opt  =  subs  (  x1  ,  lösning  );  x2opt  =  subs  (  x2  ,  lösning  );  p1opt  =  subs  (  p1  ,  lösning  );  p2opt  =  subs  (  p2  ,  lösning  );  slutet 

Optimala kontrollproblem stöds

externa länkar

  • TOMLAB - Utvecklare och distributör av mjukvaran.
  • TomSym - Källtransformationsmotor som används i programvara.
  • PROPT - Hemsida för PROPT.
  • SNOPT - Standardlösare som används i PROPT.