Difference between revisions of "SH0088 2013"

From Heureka Wiki
Jump to navigation Jump to search
 
(36 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''Här följer instruktioner för dig som går kursen "Skogsbruksplanering" vårterminen 2013. Förutom det som står här och i andra delar av Heurekas wiki finner ni bra stöd på Heurekas hjälp-sidor [http://heurekaslu.org/help/ här]. Föreliggande kurs går först och främst ut på att lära sig upprätta en skogsbruksplan. Långsiktiga konsekvensberäkningar och scenarioanalyser ingår normalt inte i en skogsbruksplan. Heureka-momentet och användandet av PlanVis ska ses som ett komplement där ni i viss mån instrueras att använda ett datorprogram utan att till fullo förstå dess funktion. Det kommer dock finnas möjligheter senare i er utbildning att läsa kurser som fördjupar förståelsen av Heurekasystemet - om strategier för ett hållbart skogsbruk, om flermålsplanering, om optimering med hjälp av linjärprogrammering etc.'''
+
'''Här följer instruktioner för dig som går kursen "Skogsbruksplanering" vårterminen 2013. Förutom det som står här och i andra delar av Heurekas wiki finner ni bra stöd på Heurekas hjälp-sidor: http://heurekaslu.org/help/. Föreliggande kurs går först och främst ut på att lära sig upprätta en relativt traditionell skogsbruksplan. Långsiktiga konsekvensberäkningar och scenarioanalyser ingår normalt inte i en skogsbruksplan. Heureka-momentet och användandet av PlanVis ska ses som ett komplement där ni i viss mån instrueras att använda ett datorprogram utan att till fullo förstå dess funktion. Det kommer dock finnas möjligheter senare i er utbildning att läsa kurser som fördjupar förståelsen av Heurekasystemet - om strategier för ett hållbart skogsbruk, om flermålsplanering, om optimering med hjälp av linjärprogrammering etc.'''
  
 
==Installationsanvisningar==
 
==Installationsanvisningar==
För att installera PlanVis så följ den här [http://heureka2-1.slu.se/publish/test/PlanWise/ länken].
 
  
Om du ska köra på din egen PC måste du installera SQL Server Express (version 2005 eller 2008), se anvisningar [[Install_SQL_Server/sv | här]].  
+
'''OBS: För att installera PlanVis så följ den här länken: http://heureka2-1.slu.se/publish/test/ClickOnce/PlanWise/setup.exe '''
  
===Språkinställning===
+
Du installerar alltså en testversion, då du förmodligen sitter vid en studentdator för vilken du saknar administratörsrättigheter, där programmet installeras under din användarprofil. Om du vill installera PlanVis på din egen PC så gå vägen via "Download and install", men då måste du även installera en SQL Server som kan hantera all data lokalt. Från PlanVis på en studentdator kopplar du upp dig mot databaser på en riktig fjärr-SQL Server. Heureka kan köras på Mac'ar men då må man först emulera ett Windows o/s.
Via "Tools" > "Customize" > "Language" kan du ändra till en version som är halvvägs, halvbra översatt till svenska!
 
  
 
==Skapa projekt==
 
==Skapa projekt==
Det första man gör när man har startat PlanWise är att öppna ett befintligt eller skapa ett nytt projekt. Projektet innehåller användarinställningar och datasbaskopplingar. Se även [[Skapa_nytt_projekt| Skapa nytt projekt]].
+
Det första man gör när man startat PlanVis är att skapa ett nytt projekt (eller öppna ett befintligt). Projektet innehåller användarinställningar och datasbaskopplingar. Grundregeln är att (när möjlighet ges) ge så deskriptiva namn som möjligt - på vad det än är. Att acceptera grundinställningens "ProjectX" är nog olämpligt.  
  
{|
+
Konfigurera så hera ("Windows Authentication" innebär att du loggar in i databaserna med samma uppgifter som i Windows och det är alltså redan gjort), börja att "Browsa" inställningarna för skogsdatabasen:
|[[Image:ConfigDBconn.jpg|300px|thumb|left|Figur 5]]
 
|}
 
 
 
Figur 5 visar konfigurationen, men observera att det är fel server- och databasnamn! "Windows Authentication" innebär att du loggar in i databasen med samma uppgifter som i Windows. Om du arbetar i datasalen har du tillgång till en särskild server med färdiginstallerade databaser:
 
  
 
;Servernamn: SQL1-1.SLU.SE\ALLA
 
;Servernamn: SQL1-1.SLU.SE\ALLA
;Databas: Indata_SH0130_2012_1
+
;Databas: Indata_SH0088_2013
  
Om du använder en egen PC anger du servernamn = LOCALHOST\SQLEXPRESS (eller bara .\SQLEXPRESS). Du måste i så fall först [http://heureka.resgeom.slu.se/wiki/index.php?title=Installera_befintlig_databas installera databasen med hjälp av SQL Server Management Studio]. Hämta .bak-filen för indatabasen [ftp://salix.slu.se/download/Heureka/Database/ här].
+
Om du använder en egen PC anger du servernamn = LOCALHOST\SQLEXPRESS (eller bara .\SQLEXPRESS, förutsatt att du använder Express-versionen). Du måste i så fall först skapa en skogsdatabas (tom, eller med lite demodata, men av rätt format), lämpligen från PlanVis under menyn "Data Management".
  
Du ska också ange en resultatdatabas (utdatabas) på motsvarande sätt som för skogsdatabasen (indatabasen). Om du arbetar i datasalen anger du samma servernamn men en annan databas:
+
Du ska också ange en resultatdatabas på motsvarande sätt. Om du arbetar i datasalen anger du samma servernamn men en annan databas:
  
 
;Servernamn: SQL1-1.SLU.SE\ALLA
 
;Servernamn: SQL1-1.SLU.SE\ALLA
;Databas: Utdata_SH0130_2012_X
+
;Databas: Utdata_SH0088_2013_X
  
Det finns fyra kopior av resultatdatabasen där ni får försöka sprida ut er så gott det går - om flera användare jobbar mot en och samma resultatdatabas samtidigt kan det bli långa svarstider då man "köas".
+
'''OBS:Det finns två kopior av resultatdatabasen ("_3" resp. "_4") där ni får försöka sprida ut er så gott det går - om flera användare jobbar mot en och samma resultatdatabas samtidigt kan det bli långa svarstider. 1:an och 2:an är alltså kaputta och ska inte användas!'''
  
 
Om du använder en egen PC skriver du bara in ett önskat namn på resultatdatabasen - programmet skapar sedan databasen när den behövs:
 
Om du använder en egen PC skriver du bara in ett önskat namn på resultatdatabasen - programmet skapar sedan databasen när den behövs:
Line 35: Line 29:
 
;Databas: MinaHeurekaResultat (eller något annat, men inga mellanslag och inga å, ä eller ö!)
 
;Databas: MinaHeurekaResultat (eller något annat, men inga mellanslag och inga å, ä eller ö!)
  
Observera att programvaran för PlanWise alltid måste vara lokalt installerad på den PC som används emedan datat kan finnas antingen centralt eller lokalt. Vill man ha data lokalt måste man alltså programvara installerat för dylik databashantering, t.ex. Microsofts SQL Server Express. Ett annat litet observandum är att Heureka tolkar LOCALHOST som din lokala PC emedan SQL Server (och Management Studio, där man kopplar upp sig mot fjärrserver eller "lokal server") vill att du istället anger din PCs datornamn (som du hittar under Systemegenskaper).
+
Observera att programvaran för PlanVis alltid måste vara lokalt installerad på den dator som används emedan datat kan finnas antingen centralt eller lokalt. Vill man ha data lokalt måste man alltså ha programvara installerat för dylik databashantering, i detta fallet Microsofts SQL Server. Ett annat litet observandum är att Heureka tolkar LOCALHOST som din lokala PC emedan SQL Servern vill att du istället anger din PCs datornamn (som du hittar under Systemegenskaper).
 
 
==Analysmoment 1: Indata==
 
 
 
===Importera data===
 
Detta är redan ordnat för kursen, men du kan läsa om hur man importerar data [[User%27s_guide_to_PlanStart|här]]. �?ven [[Importera_best%C3%A5ndsregister|här]] står lite mer om indataimport, såpass att du kan bilda dig en uppfattning om att det är en del uppgifter om skogen som behövs. Det stratabaserade datasetet har uppkommit via tidigare studenters fältdatainsamlingar på �?stad, gjorda enligt Indelningspaketets inventeringsmetod, inte helt olik [[Field_inventory_instruction/sv|Ivents]]. Det heltäckande datasetet baseras på det beståndsregister som finns på �?stad, den skogsbruksplan förvaltaren och Skogssällskapet använder i daglig drift, varifrån enskilda träd-uppgifter simulerats av Heurekasystemet. Då "vinner" man alltså en heltäckande bild av analysområdet, och kan då t.ex. ta rumslig hänsyn, men ser du vad man riskrar förlora vid ett sådant förfarande? Har du i tidigare kurs upprättat en skogsbruksplan kanske du kan ana riskerna, särskilt vid långsiktiga prognoser och mer avancerade planeringsanalyser (t.ex. av en viss skoglig åtgärd, ''borde vi övergå till mer låggallring? vilken gödslingsregim borde vi använda? hur kan vi gynna löv?'').
 
 
 
===Inspektera indata===
 
Genom att noggrannt inspektera analysområdets initialtillstånd kan man bättre förstå förutsättningarna för de förestående analyserna. Det kan vara en idé att kopiera ett antal uppgifter för alla bestånd (under "Details", du väljer vilka variabler du vill beakta under "Select Columns for Detailed View") till Excel och där fortsätta inspektionen. �?ven kartan kan ge bra information, se figur 6, här finns alltså bestånd med för en norrlänning anmärkningsvärt höga förråd, eller vad säger du (som gjort skogsbruksplan kring Umeå)?
 
 
 
{|
 
|[[Image:Ostadkartavol.jpg|600px|thumb|left|Figur 6]]
 
|}
 
 
 
==Analysmoment 2: Skapa skötselprogramalternativ==
 
====Skapa domäner (dela in skogen i skötselgrupper) ====
 
Den översta nivån i en förestående analys är analysområdet ("Analysis Area") som innehåller alla bestånd - behandlingsenheter ("Treatment Units") som ska analyseras. Nästa nivå utgörs av skogsdomänerna ("Forest Domains"). En skogsdomän är en grupp av bestånd som uppfyller ett eller flera villkor. Villkoren ställs utifrån beståndens initialtillstånd. Användaren anger villkoren själv och skapar därmed sina egna skogsdomäner. Man kan spara definitionen för skogsdomäner som en mall (i form av en fil på hårddisken). Denna mall kan delas med andra användare. Domäntillhörigheten är statisk genom föreliggande analyser (ett bestånd kan alltså inte "växa in" i en annan domän än den initiala under pågående planperiod).
 
 
 
I början av en analys indelas varje bestånd i en (och endast en) skogsdomän. Domänerna ställs upp i prioritetsordning och utvärderas därefter, så att den domän som står överst utvärderas först. Man kan enkelt ändra i ordningen (högerklicka och välj "Move up"). Om enheten inte tillhör den första domänen kontrolleras nästa domän, osv. Det finns alltså inga problem med att domäner faktiskt kan överlappa varandra. Den sista domänen är en "restdomän". Denna har inga villkor utan inkluderar alla enheter som inte hamnat i annan domän. Det finns alltså heller inga problem med att ställda villkor "glappar".
 
 
 
För varje skogsdomän kan man sedan koppla särskilda skötseldirektiv genom att redigera och skapa nya kontrollkategorier ("Control Categories"). Vi kallar dessa ibland skötselkategorier. En kontrollkategori utgörs av att antal kontrolltabeller. Genom dessa styr man, bland annat, vilka åtgärder som ska simuleras och hur de ska utföras. Genom att skapa en eller flera kontrollkategorier för varje skogsdomän, kan man differentiera skötseln över de olika skogsdomänerna. ''Genom en kontrolltabell av typen "Treatment Program Generator" styr man '''vilka åtgärder''' som ska simuleras och till viss del tidpunkter för dessa. Genom en kontrolltabell av typen "Treatment Model" styr man '''hur åtgärderna''' ska simuleras (utföras).''
 
 
 
För att skapa en ny skogsdomän högerklickar man på listen till "Other"-domänet och väljer "Add forest domain...". I den följande dialogrutan anges de villkor man ställer för att ett bestånd ska tillhöra den nya domänen, se figur 7. Exempelvis kan man skapa en domän som heter "�?ldre skiktad granskog" och ange villkoren som gäller för att ett bestånd ska tillhöra denna. I exemplet nedan skapar vi domäner utifrån en befintlig s.k. målklassning som fanns angivet i beståndsregistret. Målklassanpassat skogsbruk är nog det tydligaste exemplet på varför man domänindelar och sen för vissa domäner simulerar en särskild skötsel; NO-bestånden ska normalt skötas med "icke-skötsel" (dvs. lämnas till fri utveckling).
 
{|
 
|[[Image:Figur7.jpg|700px|thumb|left|Figur 7]]
 
|}
 
''OBS: Det råder ett OCH-förhållande mellan raderna, och ett bestånd har t.ex. sällan båda målklasserna NO OCH NS samtidigt. Om du vill att både NO- och NS-bestånden ska tillhöra samma skogsdomän (alltså ett ELLER-förhållande), välj då "Select multiple..." under "Expression".''
 
 
 
Repetition:
 
* '''Högerklicka på "Other" och välj "Add forest domain..." varefter dialogrutan "Edit conditions" visas'''
 
* '''Under "Property" väljs "Select property..."'''
 
Expandera "StandObject Data" och markera "ManagementClass" (avser i detta fallet Skogsstyrelsens målklassning i s.k. Gröna skogsbruksplaner).
 
* '''Ange att "ManagementClass Equal" (under "Operator") NO (under "Expression")'''
 
NO står för Naturvårdsinriktning, lämnas Orört (till skillnad från NS, Naturvårdsinriktning som kräver någon form av Skötsel).
 
* '''Döp om "Forest Domain 1" till t.ex. "NO-skog"'''
 
 
 
Vill du kolla hur många bestånd som hamnade i skapat skogsdomän högerklickar du i domänet och väljer "Evaluate forest domains" alt. "View treatment unit assignment...". Hamnade inga här får du kanske gå tillbaka och ändra kriterierna, "Edit conditions...".
 
 
 
I andra lägen kanske man vill skapa ett domän för specifika bestånd (som kanske identifierats i GISet som "bestånd angränsande till sjö med häckande storlom", "bestånd med förvaltarens favoritpass", osv.), dessa id-nummer listas då, semi-kolonseparerade, "in" "TreatmentUnit.Description". Alla siffror, inkl. nollor, och mellanslag må med, vilket är lite bökigt. Alldeles strax tillkommer sådan funktionalitet att man i kartan kan markera (ett eller) flera bestånd och direkt hänföra dessa till ett domän.
 
 
 
Vid importen av beståndsregistret kan man med fördel ta med annan viktig information via "UserDefinedVariable". Om man vill ta hänsyn till genomförda GIS-analyser, t.ex. bestånd helt eller delvis inom buffertzon till område med störningskänsliga arter, bör man alltså se till att sådana uppgifter medföljer redan vid dataimport. T.ex. skulle en av kolumnerna kunna bestå av värden 0 - 100%, beroende på hur stor del av beståndets yta som är inom nämnda buffertzon. Utifrån dessa uppgifter skulle sedan olika skogsdomäner, med olika skötselinstruktioner, kunna tillämpas.
 
  
====Skapa kontrollkategorier (specificera skötselinstruktioner) ====
+
==Indata==
Till att börja med kan påpekas att det ''för närvarande'' finns en "Default Domain Settings" som innehåller en kontrolltabell "Nature Conservation". Med hjälp av denna kan användaren simulera en generell hänsyn som avses tas, i praktiken oftast i samband med slutavverkning. Antingen nyttjas befintlig uppgift om "NCArea", dvs. antal hektar av beståndets produktiva skogsmarksareal, eller så slumpas sådan areal fram, t.ex. som 5% av hela analysområdets produktiva skogsmarksareal eller som 5% av beståndets d:o. Denna "NC-del" lämnas sedan till fri utveckling. Via "Tree Retention" kan här även simuleras lämnandet av s.k. naturvårdsträd (eller "evighetsträd", som sällan får stå i evighet, användaren kan ange när dessa träd antas vara nerblåsta - något tillvaratagande av dessa träd simuleras ej utan de får då bli del av den liggande, döda veden).
 
  
Fortsättningsvis fokuserar vi på den kontrollkategori som håller alla andra kontrolltabeller, den som kallas "Default Control Category". Under default-kategorin finns alla kontrolltabeller med alla de grundinställningar som krävs för att kunna göra en analys - eller iallafall för att kunna generera skötselprogram. ''Alla utom en; prislistan måste användaren själv lägga till - högerklicka "Default Control Category" och välj "Add pricelist...". Lägg märke till att kalkylräntan anges i denna kontrolltabell.''
+
===Exportera och importera data===
 +
Innan ni exporterar data ur pcSkog se till att skogsbruksplanen verkligen är klar och feltestad. Använd sen pcSkogs funktion "Export till Heureka PlanVis" så skapas en .csv-fil (för beståndsregisterimport) och en shape (för import av skogskarta). Ni kan öppna och kontrollera .csv-filen i Excel - fälten/kolumnerna är separerade med semikolon. Det är dock lättare att granska indatat i PlanVis, under fliken "Initial State" - kolla så det hyfsat stämmer med skogsbruksplanens uppgifter. Mången student har försökt skylla på att ''Heureka räknar konstigt'' när det egentligen handlat om fel i indata. Försök själv att göra en vettig avverkningsberäkning ett skogsinnehav med medelåldern 100 år och ett genomsnittligt förråd på 1 m<sup>3</sup>sk/ha. Skräp ut beror i 99 fall av 100 på skräp in.
  
Användaren skapar egna kontrollkategorier och till dessa lägger till de kontrolltabeller som avses editeras. ''Man behöver alltså bara lägga till de tabeller som man avser ändra i - om man annars nöjer sig med grundinställningarna läser systemet dessa från default-kontrollkategorin om de inte finns i den användardefinierade kategorin.''
+
I ert PlanVis-projekt kan ni sen via "Data Management>Import Stand Register..." importera .csv-filen, ge analysområdet ett bra namn och svara i princip "Ok" på alla följande frågor. "Import Forest Map..." är lite knöligare då shape'ns polygoner ska kopplas ihop med registrets bestånd. Använd förhandsgranskningsfönstren ni ser att det stämmer (även om sorteringen är lite olika i de två fönstren). Komihåg Heurekas Help-sidor.
  
Nedan följer en genomgång för att skapa en ny kontrollkategori, kallad "Overhallning o nat for" då den avser att överhålla skogen och använda naturlig föryngring, som ett led i naturvårdsanpassningen av skogsbruket (eller iallafall simuleringen av en sådan anpassning). Vi specificerar dylika skötselinstruktioner i två kontrolltabeller; "Treatment Program Generator" och "Treatment Model". Alla kontrolltabeller, med alla möjligheter till användarkontrollering, finns beskrivna [http://heureka.resgeom.slu.se/wiki/index.php?title=Category:Reference_Manual här]. 
+
==Skapa skötselprogramalternativ==
  
* '''Höger-klicka i kontrollkategorifönstret och välj "Add control category>New control category"'''
+
'''Läs igenom nedanstående men gör ingenting då ni kommer att hämta och fortsättningsvis använda ett fördefinierat PlanVis-projekt.'''
Denna kategori hamnar nederst i trädet, ge den ett bättre namn, t.ex. "Overhallning o nat for", se figur 8.
 
* '''Höger-klicka "Overhallning o nat for" och välj "Edit control tables>Add..."'''
 
Lägg till de två kontrolltabeller som avses editeras; "Treatment Program Generator" och "Treatment Model".
 
* '''Först editeras i "Treatment Model" så att det självföryngras...'''
 
Tabellens grundinställningar syns i "Properties"-fönstret när den är vald. �?ndra dels vid "Regeneration Settings", klicka på "..."-knappen och ändra för samtliga ståndorter till "Regeneration Code>SeedTrees", dels vid "Type of Final Felling" till "SeedTree". En hjälptext syns för vald kontrollparameter, längst ner i "Properties"-fönstret.
 
* '''Sedan editeras i "Treatment Program Generator" så skogen överhålls...'''
 
Välj tabellen och ändra i "Properties"-fönstret, framförallt vid "Final Felling Period Min" - här säkerställs att för de skötselprogram som genereras så simuleras slutavverkning först vid en tidpunkt ett antal 5-årsperioder efter LS�?. LS�? = lägsta tillåtna slutavverkningsålder enligt SVL används alltså som en referenspunkt som man förhåller sig till när skötselprogrammen spänns upp. Den är som du säkert vet läns- och ståndortsberoende. �?ndra även "Final Felling Period Max" och "Max Number of Thinnings" (så att gallring testas under tiden som bestånden överhålls). �?ndringar av en kontrollparameters default-värde syns i '''fet stil'''
 
  
{|
+
===Skapa domäner (dela in skogen i skötselgrupper)===
|[[Image:Figur8.jpg|1000px|thumb|left|Figur 8]]
+
En skogsdomän är en grupp av bestånd som uppfyller ett eller flera villkor och som avses (simuleras) skötas på ett visst sätt. Villkoren ställs utifrån beståndens initialtillstånd. Användaren anger villkoren själv och skapar därmed sina egna skogsdomäner. Domäntillhörigheten är statisk genom föreliggande analyser - ett bestånd kan alltså inte "växa in" i en annan domän än den initiala under den "pågående planeringshorisonten". I början av en analys indelas varje bestånd i en (och endast en) skogsdomän. Domänerna ställs upp i prioritetsordning och utvärderas därefter, så att den domän som står överst utvärderas först. Man kan enkelt ändra i ordningen. Om enheten inte tillhör den första domänen kontrolleras nästa domän, osv. Det finns alltså inga problem med att domäner faktiskt kan överlappa varandra. Den sista domänen är en "restdomän". Denna har inga villkor utan inkluderar alla enheter som inte hamnat i annan domän. Det finns alltså heller inga problem med att ställda villkor "glappar".
|}
 
  
De två andra användardefinierade kontrollkategorierna "Fri utveckling" respektive "Kontinuitetsskogsbruk" kan du säkert fixa själv. Här är det så väl förberett att dessa skötselsystem redan finns definierade, som komplement till systemet "trakthyggesbruk" (eng: even-aged).
+
===Definiera kontrollkategorier ("skötseldirektiv")===
 +
En kontrollkategori utgörs av att antal kontrolltabeller. Genom dessa styr man, bland annat, vilka åtgärder som ska simuleras och hur de ska utföras. Genom att skapa en eller flera kontrollkategorier för varje skogsdomän, kan man differentiera skötseln över de olika skogsdomänerna. ''Genom en kontrolltabell av typen "Treatment Program Generator" styr man '''vilka åtgärder''' som ska simuleras och till viss del tidpunkter för dessa. Genom en kontrolltabell av typen "Treatment Model" styr man '''hur åtgärderna''' ska simuleras (utföras).'' Användaren definierar egna kontrollkategorier och till dessa lägger till de kontrolltabeller som avses editeras. ''Man behöver alltså bara lägga till de tabeller som man avser ändra i - om man annars nöjer sig med grundinställningarna så läser systemet dessa från default-kontrollkategorin om de inte finns i den användardefinierade kategorin.''
  
====Koppla kontrollkategorier med skogsdomäner====
+
Som synes finns en "Default Domain Settings" som innehåller en kontrolltabell "Nature Conservation". Med hjälp av denna kan användaren simulera den naturvårdshänsyn som avses tas, i praktiken oftast i samband med slutavverkning. Det kan simuleras två sorters hänsyn: "NC-delar", större eller mindre hänsynsområden, som lämnas till fri utveckling och "Tree Retention", lämnande av s.k. naturvårdsträd (eller "evighetsträd", som varken i modellvärlden eller i praktiken ytterst sällan får stå i evighet).
Detta steg är i sin grundform enkelt, gör bara såhär:
 
  
* '''Höger-klicka det skogsdomän, här "PF-skogar", till vilken det ska kopplas en användardefinierad kontrollkategori, här "Overhallning o nat for"'''
+
===Koppla kontrollkategorier med skogsdomäner===
Välj "Edit control category connection...>Add..." och markera kontrollkategorin och tryck "Ok".
+
Detta steg är i sin grundform enkelt, gör bara såhär: höger-klicka det skogsdomän till vilken det ska kopplas en användardefinierad kontrollkategori, välj "Edit Control Category Connection..." och markera kontrollkategorin som ska användas för generation 1 (den innevarande skogen) och för generation 2 (alla efterkommande skogar) och tryck "Ok". Om man väljer att koppla flera olika kontrollkategorier till ett och samma domän finns möjligheten att i optimeringsmodellen införa en restriktion som säkerställer att vissa skogar alltid sköts med en viss skötsel.
  
Du såg kanske att man kan testa att tillämpa en kontrollkategori/skötselform för den innevarande skogen (Generation 1) och en annan skötselform för kommande generationers skogar (Gen 2, som kommer att upprepa sig in i oändligheten, dvs. även gälla för Gen 3, 4,... , �??). Det kan vara intressant om man tänker sig någon form av framtida förändring av skogsskötselinriktningen som man vill analysera, t.ex. en omläggning som gynnar skogsbränslesortimentet (som man kanske tror ska bli mer efterfrågat och p.s.s. betinga ett högre pris). Men om man vill förenkla analysen och man redan vet att t.ex. PF-skogar ska skötas med ett trakthyggesbruk med naturlig föryngring och där det sker en viss överhållning så ta bort kopplingen till "Default Control Category":
+
'''Istället för ovanstående tre delmoment, hämta hem det zippade PlanVis-projektet "SH0088_2013" från: ftp://salix.slu.se/download/Heureka/SH0088%202013/. Ta samtidigt med .hops-filen, den optimeringsmodell som ni ska använda och som jag inte är säker på att den medföljer zippen. I PlanVis använder ni sedan funktionen "File>Import Project" för att packa upp och starta det fördefinierade projektet.'''
 
 
* '''Under domänet PF-skogar, höger-klicka "Default Control Category" och välj "Delete control category connection"'''
 
Det som händer nu är att till de bestånd som faller under detta domän skapas bara en uppsättning skötselprogram, enligt den användardefinierade kontrollkategorin, här "Overhallning o nat for". Man förlorar förvisso möjligheten att utvärdera kostnaden för detta skötselsystem, i förhållande till ordinarie trakthyggesbruk (med sannolikt kortare omloppstider och med plantering som föryngringsmetod), men det kanske man redan har resultat för, från en första referensanalys? Om man väljer att skapa flera olika sorters skötselprogramuppsättningar finns möjligheten att i optimeringsmodellen införa en restriktion som säkerställer att t.ex. PF-skogar alltid sköts med en viss sorts skötsel.
 
  
====Låt systemet beräkna skötselprogramalternativ====
+
===Låt systemet beräkna skötselprogramalternativ===
Detta steg är om möjligt ännu enklare:
+
I det fördefinierade projektet ska ni sen, under fliken "TPG Settings", kunna konstatera att det finns en skogsdomänindelning och kontrollkategorier som kopplats till respektive domän. Konstatera att eran (och endast eran) importerade skogsbruksplan/skogsfastighet är vald i fönstret "Analysis Area" (kolla under fliken "Initial State"). Välj sedan "Action>Generate Treatment Programs...". I den dialogruta som följer kan användaren namnge skötselprogramuppsättningen, välja kalkylräntan, ange längden på aktuell planeringshorisont (21 femårsperioder ger en 100-årig planeringshorisont då man använder periodmitt - som ni ska göra), och max antal alternativa skötselprogram per bestånd och vilka resultatvariabler som ska tas med i prognoserna. Betänk att ytterligare resultatvariabler än grundinställningens både tar plats (i resultatdatabasen) och tid (vid skötselprogramgenereringen) så ta bara med de viktiga, förmodligen räcker tillvalet "Data per Species>Before>Volume" långt. Sen är det bara att starta skötselprogramgenereringen.
  
* '''Välj "Generate Treatment Programs..." under menyn "Action"'''
+
==Optimering==
I den dialogruta som följer kan användaren namnge skötselprogramuppsättningen (välj då ett namn som beskriver de aktuella skötselinstruktionerna), ange längden på aktuell planeringshorisont och vilka resultatvariabler som ska tas med i prognoserna. Betänk att ytterligare resultatvariabler både tar plats (i resultatdatabasen) och tid (vid skötselprogramgenereringen) så ta bara med de du avser beakta i analyserna.
 
  
Nu kan det, främst beroende på antalet bestånd (eng: treatment units) och antalet skötselprogram (eng: treatment programs) som avses genereras för varje bestånd, vara läge att ta en bensträckare och kanske t.o.m. lunch. Innan du går, kolla bara i "Output"-fönstret så skötselprogramgenereringen startar och verkar funka. En indikation att någonting blev fel är om bara enstaka program skapas för "vanliga" bestånd - då blir optimeringen skittråkig och sannolikt suboptimal.
+
===Formulera modell och lös problem===
 +
Föreliggande moment består i att med hjälp av matematisk optimering, LP (Linear Programming) resp. MIP (Mixed Integer Programming), välja ut '''ett''' skötselprogram (av de många vi nyss skapade) '''för varje bestånd''' - där valet alltså faller det program som i sammanhanget är mest måluppfyllande.
  
====Inspektera skötselprogram====
+
Öppna modellen "Max nuvärde med ransoneringsregel", kompilera och lös optimeringsproblemet (välj först eran uppsättning alternativa skötselprogram) och spara resultatet under ett lämpligt namn. Denna del gick tvivelsutan alldeles för fort - optimering och linjärprogrammering kan man ägna dagar/månader/år åt. Men acceptera det för tillfället och se fram emot senare kurser. Den som vill får givetvis fördjupa sig i optimeringsdelen, ett tips om du prova på att linjärprogrammera är att kopiera syntax från befintliga variabler och restriktioner till egendefinierade, liknande sådana och bara ändra på det man är ute efter. Röd pil markerar målfunktionen, som kan maximeras (grundinställt) eller minimeras. Att den enda inkluderade restriktionen (utöver maxArea - som är en nödvändig teknikalitet för att inte räkna samma areal flera gånger) avser Skogsvårdslagens ransoneringsregel, för brukningsenheter över 50 ha och under 1000 ha, framgår väl med all önskvärd tydlighet?
När du genom en noggrann inspektion av initialtillståndet kunde förstå förutsättningarna för det aktuella analysområdet gäller i princip samma sak här; inspektera de genererade skötselprogrammen och konstatera att de blev som du ville (enligt dina inställningar/skötselinstruktioner) och studera möjligheterna till optimering. Egentligen kan man se hela planeringsproblemet upplagt framför sig - för visst ser du behovet av ett beslutsstödjande system?
 
  
I figur 9 syns t.ex. att man tjänade dryga hundralappen (per hektar, i nuvärde vid aktuell kalkylränta = 2.5%) genom att låta just detta beståndet växa fem år till innan det slutavverkades. �?ndå så sker avverkningen när skogen "bara" är 60 år, är det ok..? Användaren väljer vilka resultatvariabler som ska beaktas via "Select Variables". Tyvärr är det oftast först i detta läge som man inser att man visst var intresserad av t.ex. trädslagsvisa uppgifter, något som man kanske glömde att ta med vid TPG'n. �?nnu tråkigare är det förstås om man upptäcker missen ännu senare, först vid optimeringen (där man t.ex. vill införa en restriktion som säkerställer att det vid varje tidpunkt finns minst 5% löv i det totala, rotstående förrådet - då behövs ju trädslagsvisa uppgifter).
+
==Analysera resultat==
 +
Beakta era resultat under fliken "Optimization Results". Härunder under under-fliken "Tables and Graphs" ska du se till att hämta hem fördefinierade rapportmallar, tryck på knappen "Download default templates" och använd dessa för att få fram både diagram och tillhörande datamatris. Diagrammen är främst för förhandsgranskningar, normalt kopieras datamatrisen (högerklicka och välj "Copy all") för att sen klistras in i Excel. Här kan man dels göra snyggare diagram (se figur 1, en s.k. avverkningsprofil) och ytterligare bearbetningar som ökar förståelsen för resultaten. T.ex. i figur 2 ses att den genomsnittliga årsavverkningen är 5.8 m<sup>3</sup>sk/ha o. år, vilket kan jämföras med genomsnittlig tillväxt (och vilket är en avsevärt rimligare avverkningstakt än t.ex. än 0.58 m<sup>3</sup>sk/ha o. år och 58 m<sup>3</sup>sk/ha o. år).
  
 
{|
 
{|
|[[Image:Figur9.jpg|1000px|thumb|left|Figur 9]]
+
|[[Image:SH00882013Figur1.png|800px|thumb|left|Figur 1]]
 
|}
 
|}
  
==Analysmoment 3: Optimering==
 
====Formulera  optimeringsmodell====
 
En fullödig och välutvecklad handledning för optimeringsverktyget, ehuru endast tillgänglig på engelska, finner du [[Optimization | här]].
 
 
Föreliggande steg består alltså i att med hjälp av optimering välja ut ''ett'' skötselprogram (av de många vi nyss skapade) ''för varje bestånd''.
 
* '''Under menyn "Optimization" väljs "Open model..."'''
 
* '''Välj "ModelBasic.Hops"'''
 
Fjolårets optimeringsmodell kan hämtas [ftp://salix.slu.se/download/Heureka/SG0060%202011/ här]. OBS: Bättre är förmodligen att använda och utgå från den med PlanWise-installationen medföljande modellen '''Max nuvärde med två sorters jämnhetskrav ver 5.Hops'''. För dig som kan din linjärprogrammering så kanske vissa saker känns bekanta? Man bygger upp sin optimeringsmodell genom att definiera "Sets", "Parameters", "Variables" och "Constraints".
 
 
I Heureka finns funktionalitet för att modellera och lösa LP- och MIP-problem. Som modelleringsspråk tillämpas ZIMPL. ZIMPLs User�??s Guide finns [http://zimpl.zib.de/download/zimpl.pdf här], läs kapitel 4.2 till och med 4.5. Nedan följer sedan ett antal syntax-exempel, vanligt förekommande i en optimeringsmodell i PlanWise.
 
 
=====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]]
+
|[[Image:SH00882013Figur2.png|800px|thumb|left|Figur 2]]
 
|}
 
|}
 
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.
 
 
=====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"
 
* 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.
 
 
=====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.
 
 
=====Sammanfattningsvis=====
 
I viss mån kanske denna kurs blivit lite för lätt, med färdiga och fungerande optimeringsmodeller... I figur 10 syns den med PlanWise medföljande modellen, röd pil markerar målfunktionen; aktiv syntax visar att det rör sig om två mål där man söker högt nuvärde men utan alltför ojämn avverkningsprofil. I egenskapsfönstret kan konstateras att optimeringsmodellens riktning är maximerande. ''Med så mycket förberett blir din uppgift att försöka förstå jämnhetsrestriktionerna "(max)volharvDecrease" och "(max)volharvIncrease", som de definierats finns en större svaghet och en stor styrka - ser du dessa?'' 
 
 
{|
 
|[[Image:Figur10.jpg|1000px|thumb|left|Figur 10]]
 
|}
 
 
====Lös optimeringsproblem====
 
* '''Högerklicka i optimeringsmodell-fönstret och välj "Compile and solve model..."'''
 
Beakta utfallet i "Output"-fönstret. Med en bra modell gick allt bra och optimeringsproblemet kunde lösas. Det kan dock krångla, om felmeddelandet "Could not build model" beror det oftast på formuleringen av problemet i optimeringsmodellen. Gå tillbaka och kontrollera variabler och restriktioner, dess definitioner och syntax (ibland kan modellen bli för stor för att kunna byggas - ta då bort parametrar, variabler och restriktioner som inte används). Felmeddelandet "Solution: Infeasible" är lite bättre men givetvis inte bra. Det fanns alltså ingen lösning på föreliggande optimeringsproblem. Gå tillbaka till optimeringsmodellen och uteslut ("Exclude") alla dina restriktioner för att sedan inkludera dem, en efter en, och försök lösa problemet efter varje inkludering. På så sätt kan man hitta åt den restriktion som är alltför restriktiv. Ibland kan man måsta backa ännu längre och generera fler skötselprogram till varje bestånd - att optimeringsproblemet saknar lösning kan mycket väl bero på att det saknas sådana skötselprogram som kan uppfylla en viss restriktion. Gå även in under menyn "Optimization>Settings...", här kan man t.ex. tillåta en längre tid i sökandet efter problemlösning.
 
 
* '''Efter att en lösning av optimeringsproblemet erhållits, välj "Save Optimization Results"'''
 
Detta så du ska kunna beakta resultatet under fliken "Optimization Results".
 
 
=====Round to integer solution?=====
 
''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 lång tid.''
 
 
Att beslutsvariabeln tillåts anta decimaltalsvärden kan i vissa lägen vara önskvärt - ni har ju jobbat med både heltäckande data (där varje bestånd representerat enbart "sig själv") och ett dataset med stickprovsavdelningar där en avdelning har en representativ areal mycket större än sin faktiska och sålunda representerar flera andra avdelningar. Resultatet för en stickprovsavdelning kan då fördelas ut på dess representerade avdelningar i förhållande till värdet på beslutsvariabeln. Men generellt kan man nog säga '''Heltäckande data = heltalsavrundning'''.
 
 
Numer finns alltså möjligheten att avrunda till heltalslösningar, väljs under "Optimization>Settings..." och innebär att man '''efter optimering''' avrundar så att ett bestånd i sin helhet bara kan åtgärdas med en typ av åtgärd i en och samma period. Men det innebär åxå att du kan få olika resultat i "Output"-fönstret jämfört med de under fliken "Optimization Results".
 
 
==Analysmoment 4: Analysera resultat==
 
Hur du väljer att analysera och presentera resultaten beror på din uppgift. Vilka resultatvariabler som är av intresse att beakta får du välja själv. Under fliken "Optimization Results" finns goda möjligheter att presentera resultat på lämpligt sätt. Tre underflikar finns här:
 
* '''Details'''
 
Här presenteras för samtliga bestånd i aktuellt analysområde det valda ("bästa") skötselprogrammet, via "View Treatment Programs". Du bestämmer vilka variabelvärden som ska beaktas (via "Select Variables") i hur många 5-årsperioder. Möjligheten finns sen att kopiera datamatrisen in i annat medium, t.ex. Excel, och där fortsätta resultatanalysen. Figur 11 visar ett resultat där varje bestånds föreslagna åtgärder, och vid en föreslagen avverkningsåtgärd då den avverkade volymen (i m<sup>3</sup>sk/ha), presenteras för de tre första 5-årsperioderna.
 
 
{|
 
|[[Image:Analysera_data_fig1.JPG|1000px|thumb|left|Figur 11]]
 
|}
 
 
* '''Tables and Graphs'''
 
Här kan användaren skapa egna period- och klassdiagram. Datamatrisen kan även här kopieras in i annan tabell etc. Observera möjligheten att välja typ av punkt-, linje- och olika sorters stapeldiagram. Du kan läsa mer här: [[Report Builder]]. Figur 12 visar en s.k. avverkningsprofil, med totalvolymer från gallring respektive slutavverkning, så man snabbt kan kontrollera t.ex. huruvida ställda jämnhetskrav haft genomslag. ''Borde jämnhetskravet ställts enbart på volymer från slutavverkningar? Och på så sätt lämnat gallringsvolymerna "obundna"?'' Med en "Period Graph" presenteras förutom diagrammet även de bakomliggande värdena i en datamatris (lämplig att kopiera och klistra in i t.ex. en tabell i Word eller i ett Excelark för att göra ett snyggare diagram). 
 
 
{|
 
|[[Image:Analysera_data_fig2.JPG|1000px|thumb|left|Figur 12]]
 
|}
 
 
* '''Map'''
 
Gör t.ex. en temakarta för variabeln "Treatments" för att se vilka åtgärder som görs i de olika bestånden i olika perioder. Välj ett resultat, t.ex. "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. "Thinning" och "Final felling" (och ev. andra förekommande avverkningsformr) och ändra färgerna på dessa. Högerklicka igen på "Treatment" och välj "Show in Map". Bläddra mellan planperioderna för att beakta föreslagna avverkningar i respektive 5-årsperiod. Figur 13 visar hur man i kartan kan beakta vilka bestånd som föreslås till vissa åtgärder i en viss period.
 
 
{|
 
|[[Image:Analysera_data_fig3.JPG|1000px|thumb|left|Figur 13]]
 
|}
 
 
Du kan läsa mer om resultatredovisning här: [[:Category:Results]]
 
  
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]

Latest revision as of 14:08, 24 May 2013

Här följer instruktioner för dig som går kursen "Skogsbruksplanering" vårterminen 2013. Förutom det som står här och i andra delar av Heurekas wiki finner ni bra stöd på Heurekas hjälp-sidor: http://heurekaslu.org/help/. Föreliggande kurs går först och främst ut på att lära sig upprätta en relativt traditionell skogsbruksplan. Långsiktiga konsekvensberäkningar och scenarioanalyser ingår normalt inte i en skogsbruksplan. Heureka-momentet och användandet av PlanVis ska ses som ett komplement där ni i viss mån instrueras att använda ett datorprogram utan att till fullo förstå dess funktion. Det kommer dock finnas möjligheter senare i er utbildning att läsa kurser som fördjupar förståelsen av Heurekasystemet - om strategier för ett hållbart skogsbruk, om flermålsplanering, om optimering med hjälp av linjärprogrammering etc.

Installationsanvisningar

OBS: För att installera PlanVis så följ den här länken: http://heureka2-1.slu.se/publish/test/ClickOnce/PlanWise/setup.exe

Du installerar alltså en testversion, då du förmodligen sitter vid en studentdator för vilken du saknar administratörsrättigheter, där programmet installeras under din användarprofil. Om du vill installera PlanVis på din egen PC så gå vägen via "Download and install", men då måste du även installera en SQL Server som kan hantera all data lokalt. Från PlanVis på en studentdator kopplar du upp dig mot databaser på en riktig fjärr-SQL Server. Heureka kan köras på Mac'ar men då må man först emulera ett Windows o/s.

Skapa projekt

Det första man gör när man startat PlanVis är att skapa ett nytt projekt (eller öppna ett befintligt). Projektet innehåller användarinställningar och datasbaskopplingar. Grundregeln är att (när möjlighet ges) ge så deskriptiva namn som möjligt - på vad det än är. Att acceptera grundinställningens "ProjectX" är nog olämpligt.

Konfigurera så hera ("Windows Authentication" innebär att du loggar in i databaserna med samma uppgifter som i Windows och det är alltså redan gjort), börja att "Browsa" inställningarna för skogsdatabasen:

Servernamn
SQL1-1.SLU.SE\ALLA
Databas
Indata_SH0088_2013

Om du använder en egen PC anger du servernamn = LOCALHOST\SQLEXPRESS (eller bara .\SQLEXPRESS, förutsatt att du använder Express-versionen). Du måste i så fall först skapa en skogsdatabas (tom, eller med lite demodata, men av rätt format), lämpligen från PlanVis under menyn "Data Management".

Du ska också ange en resultatdatabas på motsvarande sätt. Om du arbetar i datasalen anger du samma servernamn men en annan databas:

Servernamn
SQL1-1.SLU.SE\ALLA
Databas
Utdata_SH0088_2013_X

OBS:Det finns två kopior av resultatdatabasen ("_3" resp. "_4") där ni får försöka sprida ut er så gott det går - om flera användare jobbar mot en och samma resultatdatabas samtidigt kan det bli långa svarstider. 1:an och 2:an är alltså kaputta och ska inte användas!

Om du använder en egen PC skriver du bara in ett önskat namn på resultatdatabasen - programmet skapar sedan databasen när den behövs:

Servernamn
LOCALHOST\SQLEXPRESS
Databas
MinaHeurekaResultat (eller något annat, men inga mellanslag och inga å, ä eller ö!)

Observera att programvaran för PlanVis alltid måste vara lokalt installerad på den dator som används emedan datat kan finnas antingen centralt eller lokalt. Vill man ha data lokalt måste man alltså ha programvara installerat för dylik databashantering, i detta fallet Microsofts SQL Server. Ett annat litet observandum är att Heureka tolkar LOCALHOST som din lokala PC emedan SQL Servern vill att du istället anger din PCs datornamn (som du hittar under Systemegenskaper).

Indata

Exportera och importera data

Innan ni exporterar data ur pcSkog se till att skogsbruksplanen verkligen är klar och feltestad. Använd sen pcSkogs funktion "Export till Heureka PlanVis" så skapas en .csv-fil (för beståndsregisterimport) och en shape (för import av skogskarta). Ni kan öppna och kontrollera .csv-filen i Excel - fälten/kolumnerna är separerade med semikolon. Det är dock lättare att granska indatat i PlanVis, under fliken "Initial State" - kolla så det hyfsat stämmer med skogsbruksplanens uppgifter. Mången student har försökt skylla på att Heureka räknar konstigt när det egentligen handlat om fel i indata. Försök själv att göra en vettig avverkningsberäkning på ett skogsinnehav med medelåldern 100 år och ett genomsnittligt förråd på 1 m3sk/ha. Skräp ut beror i 99 fall av 100 på skräp in.

I ert PlanVis-projekt kan ni sen via "Data Management>Import Stand Register..." importera .csv-filen, ge analysområdet ett bra namn och svara i princip "Ok" på alla följande frågor. "Import Forest Map..." är lite knöligare då shape'ns polygoner ska kopplas ihop med registrets bestånd. Använd förhandsgranskningsfönstren så ni ser att det stämmer (även om sorteringen är lite olika i de två fönstren). Komihåg Heurekas Help-sidor.

Skapa skötselprogramalternativ

Läs igenom nedanstående men gör ingenting då ni kommer att hämta och fortsättningsvis använda ett fördefinierat PlanVis-projekt.

Skapa domäner (dela in skogen i skötselgrupper)

En skogsdomän är en grupp av bestånd som uppfyller ett eller flera villkor och som avses (simuleras) skötas på ett visst sätt. Villkoren ställs utifrån beståndens initialtillstånd. Användaren anger villkoren själv och skapar därmed sina egna skogsdomäner. Domäntillhörigheten är statisk genom föreliggande analyser - ett bestånd kan alltså inte "växa in" i en annan domän än den initiala under den "pågående planeringshorisonten". I början av en analys indelas varje bestånd i en (och endast en) skogsdomän. Domänerna ställs upp i prioritetsordning och utvärderas därefter, så att den domän som står överst utvärderas först. Man kan enkelt ändra i ordningen. Om enheten inte tillhör den första domänen kontrolleras nästa domän, osv. Det finns alltså inga problem med att domäner faktiskt kan överlappa varandra. Den sista domänen är en "restdomän". Denna har inga villkor utan inkluderar alla enheter som inte hamnat i annan domän. Det finns alltså heller inga problem med att ställda villkor "glappar".

Definiera kontrollkategorier ("skötseldirektiv")

En kontrollkategori utgörs av att antal kontrolltabeller. Genom dessa styr man, bland annat, vilka åtgärder som ska simuleras och hur de ska utföras. Genom att skapa en eller flera kontrollkategorier för varje skogsdomän, kan man differentiera skötseln över de olika skogsdomänerna. Genom en kontrolltabell av typen "Treatment Program Generator" styr man vilka åtgärder som ska simuleras och till viss del tidpunkter för dessa. Genom en kontrolltabell av typen "Treatment Model" styr man hur åtgärderna ska simuleras (utföras). Användaren definierar egna kontrollkategorier och till dessa lägger till de kontrolltabeller som avses editeras. Man behöver alltså bara lägga till de tabeller som man avser ändra i - om man annars nöjer sig med grundinställningarna så läser systemet dessa från default-kontrollkategorin om de inte finns i den användardefinierade kategorin.

Som synes finns en "Default Domain Settings" som innehåller en kontrolltabell "Nature Conservation". Med hjälp av denna kan användaren simulera den naturvårdshänsyn som avses tas, i praktiken oftast i samband med slutavverkning. Det kan simuleras två sorters hänsyn: "NC-delar", större eller mindre hänsynsområden, som lämnas till fri utveckling och "Tree Retention", lämnande av s.k. naturvårdsträd (eller "evighetsträd", som varken i modellvärlden eller i praktiken ytterst sällan får stå i evighet).

Koppla kontrollkategorier med skogsdomäner

Detta steg är i sin grundform enkelt, gör bara såhär: höger-klicka det skogsdomän till vilken det ska kopplas en användardefinierad kontrollkategori, välj "Edit Control Category Connection..." och markera kontrollkategorin som ska användas för generation 1 (den innevarande skogen) och för generation 2 (alla efterkommande skogar) och tryck "Ok". Om man väljer att koppla flera olika kontrollkategorier till ett och samma domän finns möjligheten att i optimeringsmodellen införa en restriktion som säkerställer att vissa skogar alltid sköts med en viss skötsel.

Istället för ovanstående tre delmoment, hämta hem det zippade PlanVis-projektet "SH0088_2013" från: ftp://salix.slu.se/download/Heureka/SH0088%202013/. Ta samtidigt med .hops-filen, den optimeringsmodell som ni ska använda och som jag inte är säker på att den medföljer zippen. I PlanVis använder ni sedan funktionen "File>Import Project" för att packa upp och starta det fördefinierade projektet.

Låt systemet beräkna skötselprogramalternativ

I det fördefinierade projektet ska ni sen, under fliken "TPG Settings", kunna konstatera att det finns en skogsdomänindelning och kontrollkategorier som kopplats till respektive domän. Konstatera att eran (och endast eran) importerade skogsbruksplan/skogsfastighet är vald i fönstret "Analysis Area" (kolla under fliken "Initial State"). Välj sedan "Action>Generate Treatment Programs...". I den dialogruta som följer kan användaren namnge skötselprogramuppsättningen, välja kalkylräntan, ange längden på aktuell planeringshorisont (21 femårsperioder ger en 100-årig planeringshorisont då man använder periodmitt - som ni ska göra), och max antal alternativa skötselprogram per bestånd och vilka resultatvariabler som ska tas med i prognoserna. Betänk att ytterligare resultatvariabler än grundinställningens både tar plats (i resultatdatabasen) och tid (vid skötselprogramgenereringen) så ta bara med de viktiga, förmodligen räcker tillvalet "Data per Species>Before>Volume" långt. Sen är det bara att starta skötselprogramgenereringen.

Optimering

Formulera modell och lös problem

Föreliggande moment består i att med hjälp av matematisk optimering, LP (Linear Programming) resp. MIP (Mixed Integer Programming), välja ut ett skötselprogram (av de många vi nyss skapade) för varje bestånd - där valet alltså faller på det program som i sammanhanget är mest måluppfyllande.

Öppna modellen "Max nuvärde med ransoneringsregel", kompilera och lös optimeringsproblemet (välj först eran uppsättning alternativa skötselprogram) och spara resultatet under ett lämpligt namn. Denna del gick tvivelsutan alldeles för fort - optimering och linjärprogrammering kan man ägna dagar/månader/år åt. Men acceptera det för tillfället och se fram emot senare kurser. Den som vill får givetvis fördjupa sig i optimeringsdelen, ett tips om du prova på att linjärprogrammera är att kopiera syntax från befintliga variabler och restriktioner till egendefinierade, liknande sådana och bara ändra på det man är ute efter. Röd pil markerar målfunktionen, som kan maximeras (grundinställt) eller minimeras. Att den enda inkluderade restriktionen (utöver maxArea - som är en nödvändig teknikalitet för att inte räkna samma areal flera gånger) avser Skogsvårdslagens ransoneringsregel, för brukningsenheter över 50 ha och under 1000 ha, framgår väl med all önskvärd tydlighet?

Analysera resultat

Beakta era resultat under fliken "Optimization Results". Härunder under under-fliken "Tables and Graphs" ska du se till att hämta hem fördefinierade rapportmallar, tryck på knappen "Download default templates" och använd dessa för att få fram både diagram och tillhörande datamatris. Diagrammen är främst för förhandsgranskningar, normalt kopieras datamatrisen (högerklicka och välj "Copy all") för att sen klistras in i Excel. Här kan man dels göra snyggare diagram (se figur 1, en s.k. avverkningsprofil) och ytterligare bearbetningar som ökar förståelsen för resultaten. T.ex. i figur 2 ses att den genomsnittliga årsavverkningen är 5.8 m3sk/ha o. år, vilket kan jämföras med genomsnittlig tillväxt (och vilket är en avsevärt rimligare avverkningstakt än t.ex. än 0.58 m3sk/ha o. år och 58 m3sk/ha o. år).

Figur 1
Figur 2