Extra bivillkor

För att få rimliga körtider måste man hjälpa fmincon, eftersom rutinen annars lätt tar helt vansinniga steg. Rutinen borde kunna få den hjälpen från de enkla gränserna, men det verkar inte räcka, så använd följande uppsättning ickelinjära olikhetsbivillkor som gör susen (åtminstone i mina tester).

Vi har variablerna xk, yk, k = 1, ..., n. Låt mx vara medelvärdet av de aktuella x-värdena (help mean) analogt för my. Notera att mx och my ändras när rutinen söker sig fram mot minimum. Låt r vara en uppskattning av radien i inhägnaden (du vet ju omkretsen, använd inte det värde på omkretsen som du räknar ut i rutinen utan använd det värde som är givet i lab-pm, en konstant med andra ord). (Inhägnaden är inte alltid cirkelformad, med det spelar mindre roll.) Inför de n bivillkoren (inte ett bivillkor, med andra ord):

(xk- mx)2 + (yk- my)2 <=  2 r2, k = 1, ..., n

Observera att dessa vilkor är till för att begränsa rutinens steglängd, men vi vill inte att bivillkoren direkt skall påverka inhägnadens form. Inget av ovanstående villkor skall alltså vara aktivt i minimum, dvs inget av villkoren skall vara uppfyllt med likhet, eftersom det då (sannolikt) har begränsat stängslets form. När fmincon är färdig skall man alltså inte ha fått en utskrift i stil med:

Active inequalities (to within options.TolCon = 1e-06):
  lower      upper     ineqlin   ineqnonlin
                                     1
                                    30
I detta fall är två ickelinjära olikhetsbivillkor (ineqnonlin), 1 och 30, aktiva (Active inequalities). Denna kolumn skall dock vara tom. Andra kolumner behöver inte alltid vara tomma (det beror på vilken av labuppgifterna det rör sig om).

Back