Difference between revisions of "SG0060 2010"

From Heureka Wiki
Jump to navigation Jump to search
Line 167: Line 167:
 
====Formulera  optimeringsmodell====
 
====Formulera  optimeringsmodell====
 
Länk: [[Optimization]]
 
Länk: [[Optimization]]
 +
Handledning för optimeringsverktyget finner du [[Optimization | här]].
 +
 +
Nästa steg består i att med hjälp av optimering välja ut ett skötselprogramalternativ (av de många vi nyss skapade) för varje åtgärdsenhet.
 +
* '''Under menyn "Optimization" väljs "Open Optimization"'''
 +
* '''Välj "Model8b.Hops"'''
 +
Ev. må du söka rätt på den själv, under den delade mappen "SH0085". Här finns nu en ny version, "Model9c.Hops" som är mycket bättre (när den fungerar). För dig som kan din linjärprogrammering och även har kört Lingo eller AIMMS så kanske vissa saker känns bekanta? Man bygger upp sin optimeringsmodell genom att definiera "Sets", "Parameters", "Variables" och "Constraints".
 +
 +
''Förvånad att LP används i Heureka? Som namnet antyder trodde man förvisso först att någon heuristisk metod skulle nyttjas i optimeringarna emedan LP-utvecklingen liksom kommit ikapp och nu är nästan jämsides med utvecklingen av Heureka-applikationerna (!) och häri passar riktigt bra.''
 +
 +
* '''Högerklicka på "Model8b" i fönstret "Model Optimization Builder" och välj "Solve Model"'''
 +
Klicka på "Ok" och vänta några minuter.
 +
* '''Gör en temakarta för variabeln "Treatments" för att se vilka åtgärder som görs i de olika bestånden i olika perioder'''
 +
Tag först fram fliken "Map" (ev. via menyn "View") och välj "Strategic Optimization" i rutan bredvid "Result:" (ev. må du först trycka på "Refresh"-knappen). I fönstret "Map Properties" expanderar du "Treatments" och väljer "Treatment". Högerklicka och välj "Add Items Automatically" så får du upp en dialogruta. Ta bort åtgärder som du inte vill visa (markera och klicka på "Remove"). Spara bara t.ex. "Thin(ning)" och "FinalFelling" och ändra färgerna på dessa. Högerklicka igen på "Treatment" och välj "Show in Map". Högt upp i kartfönstret finns pilar för att bläddra mellan planperioderna.
 +
 +
''Slutavverkas ett och samma bestånd i två på varandra följande tidsperioder? Det kan verka så emedan det eg. är fråga om delavverkning (t.ex. 75% (av beståndets yta) avverkas först, 25% under nästa 5-årsperiod). Sådant kan bli aktuellt om man har relativt få men stora bestånd (och kanske i optimeringen inkluderat ett villkor som begränsar hyggesstorleken, "_limitFinalFelling"). Ett sätt att undvika detta är att för beslutsvariabeln "_x" ändra "RangeType" till binär, alltså accepteras endast värdena 0 eller 1, optimeringen blir då emellertid svårare och kan ta rysligt lång tid.''
 +
 +
 +
 +
===Kontovariabel som summerar avverkad volym i varje tidsperiod:===
 +
<pre>FORALL <p> IN _periods DO
 +
        SUM<i,j,r> IN _treatmentunits * _alternatives * _rowno :
 +
        _volumeHarv[i,j,p,r] * _area[i] * _x[i,j] == _volHarvTot[p];</pre>
 +
 +
Definitionen skrivs in direkt i ''variabelns'' definitionsfönster, men är i egentlig mening en ''restriktion''. Restriktionen motsvarar följande matematiska uttryck (restriktion) i en LP-modell:
 +
{|
 +
|[[Image:PlanVis_Tut_Fig5_formula.png|left]]
 +
|}
 +
 +
där:
 +
 +
''I'' = mängden (set) av behandlingsenheter ("Treatment Units")
 +
 +
''J'' = mängden av (index) för tillgängliga skötselprogram
 +
 +
''R'' = mängden åtgärder (åtgärdsnummer) i en och samma period
 +
 +
''area<sub>i</sub>'' = areal för behandlingsenhet ''i'' (faktisk eller "representativ")
 +
 +
''volumeHarv<sub>ijpr</sub>'' = avverkad volym i enhet ''i'' under period ''p'', givet att skötselprogram ''j'' tillämpas, från åtgärd ''r''
 +
 +
''volHarvTot<sub>p</sub>'' = summa avverkad volym under period ''p''
 +
 +
''x<sub>ij</sub>'' = beslutsvariabel (binär) = 1 om skötselprogram ''j'' tillämpas för enhet ''i'', annars 0
 +
 +
===Kontovariabel som summerar volym som slutavverkas i varje tidsperiod:===
 +
<pre>FORALL <p> IN _periods DO
 +
        SUM<i,j,r> IN _treatmentunits * _alternatives * _rowno with _treatment[i,j,p,r]==8:
 +
          _volumeHarv[i,j,p,r] * _area[i] * _x[i,j] == _volHarvFinalFelledTot[p];</pre>
 +
 +
Skillnaden mot föregående uttryck är att efter "rowno" följer ett villkor att summering bara ska göras för slutavverkningsåtgärder (som har koden 8). Notera användningen av dubbla likhetstecken. ''För att visa definitionen av en definierad kontovariabel dubbelklickar du på den.''
 +
 +
===Kontovariabel för arealen slutavverkning i varje tidsperiod:===
 +
Denna variabel är nästan identisk med den föregående, vi tar bara bort parametern "_volumeHarv(i,j,p,r)" från uttrycket.
 +
<pre>FORALL <p> IN _periods DO
 +
        SUM<i,j,r> IN _treatmentunits * _alternatives * _rowno with _treatment[i,j,p,r]==8:
 +
        _area[i] * _x[i,j] == _areaFinalFelledTot[p];</pre>
 +
''"8" i ovanstående två uttryck är alltså det numeriska värde som motsvarar slutavverkning för parametern "_treatment". Man kan kontrollera dylikt genom att högerklicka på parametern och välja "View definition" (testa detta även för "_forestDomain" och "_trmtCategory", särskilt bra om man skapat flera nya skogsdomäner med viss sorts skötsel definierat i kontrollkategorierna).''
 +
 +
===Restriktion som begränsar hur stor areal som får slutavverkas i varje tidsperiod:===
 +
<pre>FORALL <p> IN _periods DO
 +
_areaFinalFelledTot[p] <= 20;</pre>
 +
 +
Vi använder alltså den kontovariabel för slutavverkningsareal som vi skapade ovan, och lägger in restriktionen (eg. restriktionerna) att den slutavverkade arealen får vara högst 20 hektar i en och samma period. ''Om du vill inaktivera en restriktion utan att ta bort så högerklicka och välj "Exclude".''
 +
 +
===Lägga till ny parameter===
 +
"Sets" och "Parameters" utgör indata till optimeringsmodellen. En parameter får sitt värde antingen genom att koppla den till resultatdata som har beräknats av skötselprogramgeneratorn eller genom att ge den en matematisk definition. ''Blanda inte ihop "variabler" som beräknas av skötselprogramgeneratorn med "beslutsvariabler" i optimeringsmodellen. För modellen är alla variabler som beräknas utanför den konstanter (dvs. element i ett "Set" eller i en "Parameter").''
 +
 +
Så här gör man för att skapa en ny parameter och koppla den till resultatdata:
 +
* Högerklicka på "Parameters" och välj "Add new parameter"
 +
Har du gått vilse bland alla fönster så under menyn "View" väljs "Model Optimization Builder".
 +
* Låt "Heureka result variable" vara valt och klicka på "Next"
 +
Vi ska alltså i detta läge inte skriva en ny formel, utan koppla parametern direkt till en kolumn i databasen där skötselprogramalternativen har sparats.
 +
* Välj t.ex. "TreatmentControlCategory" under noden "Forest Domain"
 +
* Byt parameternamnet till något bättre.
 +
Den nya hamnar längst ner bland alla "Parameters". Ett bättre namn är ett som indikerar vad det handlar om, i rutan "Properties" och bredvid "Description" kan en ännu fylligare förklaring skrivas in. 
 +
 +
Notera att systemet själv håller reda på indexeringen. I detta fall har vi en skötselkategori för varje behandlingsenhet, skötselprogramalternativ och period. Att vi har med period beror på att skötselkategorin kan vara olika före och efter slutavverkning (vi går inte in på detta mer i denna övning).
 +
 +
===Lägga till ny restriktion===
 +
* Högerklicka på "Constraints" och välj "Add new constraint"
 +
* Klicka på den restriktion som har skapats.
 +
I rutan "Properties" för restriktionen väljer du "Click to add index", lägger till och väljer "_Periods[p]" för att skapa en restriktion för varje tidsperiod.
 +
 +
===Exempelfiler===
 +
Dessa optimeringsfiler kan du ladda ner och öppna via meny "Optimization" > "Open optimization": 
 +
*[ftp://salix.slu.se/download/heureka/optimization/Model9c.hops Model9c.hops]
 +
Nya och andra komponenter kommer att göras tillgängliga på denna ftp-server (ftp://salix.slu.se/download/Heureka/), t.ex. skript ("SQL queries") att använda (som mall - skriv om för att få ut det du vill ha) för rapporter från resultat-databasen. Detta avser både när man vill närmre studera initialtillståndet men kanske främst planen - simulerings- och optimeringsresultatet.
 +
 +
''Förbättrad funktionalitet under "View" > "Optimization Result Viewer" och möjligheten att här välja en simulering/optimering och sedan skapa egna diagram (under "Diagrams" > "User defined") för att beakta resultaten gör ev. SQL queries överflödiga.''
  
 
====Lös optimeringsproblem====
 
====Lös optimeringsproblem====

Revision as of 16:39, 28 December 2010