Här får du tips och hjälp om hur du formulerar optimeringsproblem.

 

OptModelUI

Figur 1. Fliken Optimeringsmodell i PlanVis.

 

tog_minusLägg till parameter som är länkad till ett skötselprogram
1.Högerklicka på Parameters i modellträdet och "Lägg till ny parameter..."
2.Välj "Heureka resultatvariabel" och skriv in ett lämpligt namn.

OptMod_addParam_wizard1

 

3.Välj önskad variabel:

OptMode_addParam_selectVar

4.Begränsa gärna antalet decimaler om detta inte är kritiskt.
5.Klicka på Slutför. Notera i modellträdet att index har lagts till automatiskt (1). mAlder[i,j,p] = medelålder för bestånd i vid period p givet att skötselprogram j tillämpas. Lägg också märket till ResultProperty-fältet (2) som visar vilken variabel som parametern är länkad till. Du kan även ändra variabel genom att i klicka på i detta fall ForestData.Age Before.

OptModel_paramMeanAge

 

 

tog_minusKontovariabler underlättar!

Så kallade kontovariabler används med fördel i en optimeringsmodell för att förbättra läsbarheten och förenkla formuleringen av restriktioner. En kontovariabel har, till skillnad för en beslutsvariabel, en definition vilket innebär att den är en funktion av andra variabler i modellen. Definitionen är i själv verket en likhetsekvation i optimeringsmodellen. Ett exempel på en användbar kontovariabel är den totala avverkningsvolymen under en period. Denna variabel kan sedan användas i olika restriktioner. Gör såhär för att skapa en kontovariabel:

 

1.Högerklicka i optimeringsmodellen på "Variables" och välj "Lägg till ny variabel".

OptModel_AddNewVariable

2.Högerklicka på variabeln och ändra namn från "DefaultName ..." till något bättre, i exemplet nedan AvvVolTot.

OptModel_AddNewVariable_name

3.För att definiera en indexerad variabel, till exempel för att ha en variabel för varje tidsperiod, klicka på "Click to add index" under Data binding, och lägg till index Periods.

OptModel_addNewVar_addIndex

 

4.Nu ska variabelnamnet ha fått ett suffix ([p]). I syntaxfönstret skriver du in definition med uttrycket på vänster sida och namnet på variabeln på höger sidan, med två likhetstecken emellan. Exempel (förutsätter att parametern volAvv[i,j,p,k] redan har lagts till):

Klicka för att förstora

 

Definition:

 

forall <p> in Periods with p >= 1 :

 

 sum <i,j,k> in TreatmentUnits * Alternatives * Treatments

 

   with altIncluded [i,j] == 1 :

 

      area[i]*volAvv[i,j,p,k]*x[i,j] == AvvVolTot[p] ;

 

 

 

flag_green      

Viktigt!

Som standard sätts en variabel till typen icke-negativ (RangeType = None-negative). Detta innebär att negativa värden anses omöjliga. Till exempel kan en volym inte vara negativ. Vissa kontovariabler ska emellertid kunna få vara negativa, till exempel nettointäkten under en period kan vara negativ om kostnaderna är större än intäkterna. I detta fall måste du ändra RangeType till "All".

 

tog_minusLägg till restriktion
1.Högerklicka på "Constraints" och välj "Lägg till ny restriktion".

OptModel_addConstraint

2.Skriv in ett namn, t ex "IckeAvtagandeAvverkning" och klicka på OK.

OptModel_ickeAvtagandeAvv

3.Välj restriktionen i modellträdet och skriv in definitionen i syntaxfönstret. Till exempel, för att lägga in ett krav på att avverkningsvolymen inte får sjunka över tiden anger vi följande restriktion (givet att vi redan har skapat en kontovariabel (här kallad AvvVotTot) för total avverkningsvolym per period):

OptModel_addConstraintMinAreaGamSkog

 

forall <p> in periods with p >= 2 :

 

AvvVolTot[p] >= AvvVolTot[p-1] ;

 

Detta betyder att för varje period (p) från och med period 2, ska avverkningen vara större eller lika med föregående periods avverkning. Att vi börjar med period 2 beror på att vi normalt använder periodmitt, och att p = 0 avser startläget, och p = 1 avser första avverkningsperioden (år 1-5).

 

 

prod_tip       Tips - modellparameter istället för "hårdkodning"!

Istället för att ange siffran 100 som krav för gammal skog, kan du skapa en parameter som du kallar t ex "minAlder" av typen "Konstant värde", ge den värdet 100, och byta ut 100 i definitionen ovan mot "minAlder". Denna typ av parametrisering underlättar om du använder ett visst värde på flera ställen i en modell.

 

 

Obs! Det kan hända att det inte finns någon lösning, dvs. det finns inte 10 % gammal skog. I detta fall kan du lägga till en "straffvariabel".

 

tog_minusLägg till en "formell-parameter"

Du kan lägga in formler som för optimeringsmodellen behandlas som konstanta värden. Ett användbart exempel är en parameter för summan av beståndens arealer. Denna är naturligtvis olika för olika analysområden, men för ett givet analysområde är den oberoende av vilka skötselprogram som väljs, dvs. den kan hanteras som en konstant (och konverteras av ZIMPL till en konstant).

 

Exempel:

1.Högerklicka på Parameters i modellträdet och välj "Lägg till ny parameter".

OptModel_addNewParam

 

2.Skriv in önskat namn, t ex SummaAreal, och välj "Formelparameter". Klicka på Nästa.
3.Skriv in definitionen, i detta fall:

sum <i> in TreatmentUnits : area[i];

En definition kan ändras senare.

4.Klicka på Slutför

Du kan sedan använda TotalAreal i restriktioner. Antag t ex att max 1 % av får gödslas varje år. Antag också att du har skapat en kontovariabel GodsladAreal[p] = areal gödsling i period p. En restriktion för detta blir då

forall <p> in Periods :

GodsladAreal[p] <= 0.01 * TotalAreal ;

 

tog_minusLägg till hyggesstorleksbegränsning

En av Heurekas unika funktioner är att hyggesstorleksbegränsningar kan läggas in automatiskt. Denna förutsätter att du har importerat en skogskarta. Du lägger till restriktionen genom menyn Optimering > Lägg till hyggesstorleksbegränsning. De restriktioner som läggs in är tämligen komplexa. Modellelement med namnet "Cluster" och "HarvestCluster" hör till hyggesstorleksbegränsningarna.

 

 

 

Kontakta support. © Sveriges Lantbruksuniversitet