Variationer1

Peter Lohmander

Version 2007-10-14

 

 

Varmt tack till förvaltare Magnus Bergman och Utvecklingschef Karl Larsson, SCA, samt studenter på

 jägmästarprogrammet, för relevanta parametrar samt kontroller av en tidigare version av denna modell !

 

Peter Lohmander

 

  

 

#1. Grundmodell

 

#2. Ökad lagringskostnad i september och oktober för talltimmer och grantimmer

 

#3. Import av talltimmer upphör från och med November

 

#4. Ökade räntekrav

 

#5. Vägstandard kontra väglager

 

#6. Ändrade Lagringskostnader för vissa sortiment

 

#7. CTI utrustning, dyrare och tyngre bilar samt minskat vägslitage

 

 

#1. Grundmodell

 

! SCA_Logistik_Lohmander_2007;

! Peter Lohmander; 

! 20071014;

 

! Denna modell är en uppdaterad version av den version som användes 20071012.

! Under den genomgangen mottogs flera konstruktiva forslag och aktuella forutsattningar;

! gallande skogsforvaltning inom SCA av forvaltare Magnus Bergman samt ;

! utvecklingschef Karl Larsson. Narvarande studenter pa jagmastarprogrammet bidrog

! med vardeulla kontroller av vissa delresultat vilka visade sig bli orimliga;

! med den tidigare versionen av modellen. Dessa kommentarer och bidrag har pa ;

! ett avgorande satt forbattrat denna modell och gjort den mer relevant for de ;

! aktuella fragestallningarna. Varmt Tack fran Peter Lohmander.;

 

 

Model:

 

! Relevant data are taken from the file SCA_Logistik 2007.xls  ;

 

SETS:

 

man/sep,okt,nov,dec,jan/:L_TT,L_GT,L_BM,L_FFG,L_LOV,L_TOT,

                         B_TT,B_GT,B_BM,B_FFG,B_LOV;

 

Avd/1..166/: ID,HFSIFFRA,TERRBSIFFRA,M3F_TOT,TT,GT,BM,FFG,LOV,DAGAR,VSIFFRA,GA;

 

Per/sep, okt, nov, dec/:GAVOL, SAVOL, Disk, GADAGAR, SADAGAR;

PerAvd(Avd, Per):Andel, costperm3;

 

ENDSETS

 

 

! Malfunktion;

! Vi minimerar nuvardet av den totala kostnaden. ;

! Vi anvander foretagets egen redovisade kalkylranta, 6.5% per year;

! Perrate beraknas som rantan for en manad. Alla kostander antages uppsta

  mitt i respektive period (manad).;

! All diskontering sker till mitten av period 0, d.v.s. Augusti 15.;

 

(1+perrate)^12 = 1.065;

@for(Per(t): Disk(t) = 1/(1+perrate)^t);

 

! En val definiera ekonomisk malfunktion forutsatter att

  kostnaderna foer drivning och vagtransport fran de olika objekten aer

  kalkylerade for alternativa perioder och finns tillgangliga i en tabell.;

! En sadan hypotetisk kostnadstabell har inkluderats i denna datormodell

  eftersom en sadan tabell saknades i det befintliga tabellunderlaget.;

 

@for(PerAvd(i,t): costperm3(i,t) = 90);

 

min = TK;

 

TK = DrivnK + LagK;

 

DrivnK = @SUM(PerAvd(i,t):Disk(t)*costperm3(i,t)*Andel(i,t)*M3F_TOT(i));

 

LagK = @SUM(Per(t): Disk(t)*(10*L_TT(t)+10*L_GT(t)+10*L_BM(t)+10*L_FFG(t)+10*L_LOV(t)));

 

!Det finns en mojlighet att definiera alla avverkningar som heltal.;

!Det ar dock oftast ej ekonomiskt optimalt att gora detta.

!Det ar vanligen optimalt att starta vissa operationer under en period

 och avsluta dem under nasta period. ;

!*********************************************************************;

!@for( PerAvd(i,t): @BIN(Andel(i,t)));

 

 

! GA(i) definieras som 1 om gallringsmaskiner kan anvandas, annars 0.;

!Gallringsmaskinlag hanterar huggningsformerna HF1 och HF7;

!Slutavverkningsmaskinlag hanterar HF2-HF6 samt HF8;

@for(Avd(i)| HFSIFFRA#EQ#1 :GA(i) = 1);

@for(Avd(i)| HFSIFFRA#EQ#7 :GA(i) = 1);

@for(Avd(i)| HFSIFFRA#GE#2 #AND# HFSIFFRA#LE#6:GA(i) = 0);

@for(Avd(i)| HFSIFFRA#EQ#8 :GA(i) = 0);

 

 

!Drivning med gallringsmaskinlag;

@for(Per(t): GAVOL(t) = @SUM(Avd(i): GA(i)*Andel(i,t)*M3F_TOT(i)));

 

!Drivning med slutavverkningsmaskinlag;

@for(Per(t): SAVOL(t) = @SUM(Avd(i): (1-GA(i))*Andel(i,t)*M3F_TOT(i)));

 

!Berakning av antal dagar som gallringslagen anvandes under olika manader;

@for(Per(t): GADAGAR(t) = @SUM(Avd(i):GA(i)*Andel(i,t)*DAGAR(i)));

 

!Berakning av antal dagar som slutavverkningslagen anvandes under olika manader;

@for(Per(t): SADAGAR(t) = @SUM(Avd(i):(1-GA(i))*Andel(i,t)*DAGAR(i)));

 

!Gallringsmaskinlagen har begransade kapaciteter i varje period;

[GADAG_S] GADAGAR(1) <= 3*20;

[GADAG_O] GADAGAR(2) <= 3*23;

[GADAG_N] GADAGAR(3) <= 3*22;

[GADAG_D] GADAGAR(4) <= 3*19;

 

 

!Gallringsmaskinlagen vill helst undvika alltfor stora neddragningar av verksamheten;

[GADAG_SL] GADAGAR(1) >= 3*20*0.8;

[GADAG_OL] GADAGAR(2) >= 3*23*0.8;

[GADAG_NL] GADAGAR(3) >= 3*22*0.8;

[GADAG_DL] GADAGAR(4) >= 3*19*0.8;

 

 

!Slutavverkningsmaskinlagen har begransade kapaciteter i varje period;

[SADAG_S] SADAGAR(1) <= 4*20;

[SADAG_O] SADAGAR(2) <= 4*23;

[SADAG_N] SADAGAR(3) <= 4*22;

[SADAG_D] SADAGAR(4) <= 4*19;

 

!Slutavverkningsmaskinlagen vill helst undvika alltfor stora neddragningar av verksamheten;

[SADAG_SL] SADAGAR(1) >= 4*20*0.8;

[SADAG_OL] SADAGAR(2) >= 4*23*0.8;

[SADAG_NL] SADAGAR(3) >= 4*22*0.8;

[SADAG_DL] SADAGAR(4) >= 4*19*0.8;

 

!Alternativa metoder motsvarar HF8. Viss volym av detta skall drivas.;

!Just nu bortser vi fran den restriktionen men den kan enkelt inkluderas;

 

 

!Alla vagar ar ej farbara alla perioder;

!**************************************;

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,1) = 0);

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,2) = 0);

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,3) = 0);

 

!Alla avverkningsobjekt har ej acceptabel baerighet alla perioder;

!****************************************************************;

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,1) = 0);

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,2) = 0);

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,3) = 0);

 

! Total avverkning;

! ****************;

!TotAvv = @sum(Avd(i): @sum(Per(t): Andel(i,t)*M3F_TOT(i)));

 

! Total bestallning;

! *****************;

!TotBest = @sum(Per(t): B_TT(t)+B_GT(t)+B_BM(t)+B_FFG(t)+B_LOV(t));

 

! Total lagerfoerandring;

! **********************;

!TotLF = TotAvv - TotBest;

!@FREE(TotLF);

 

! Kontroll av total lagerfoerandring;

! **********************************;

!CheckLF = L_TOT(5) - L_TOT(1);

!@FREE(CheckLF);

! Det visade sig att TotLF överstiger CheckLF beroende på att TotLF bygger på

  tabellvärden i kolumnen M3F_TOT. Om man summerar de olika sortimenten så blir

  summan av dem lagre an den totalt angivna volymen. Detta kan bero på att

  delar av den totala volymen ska lamnas i skogen eller ej kan klassificeras som de

  olika sortimenten.;

 

! Totala lager;

! ************;

@for(Per(t): L_TOT(t) = L_TT(t)+L_GT(t)+L_BM(t)+L_FFG(t)+L_LOV(t) );

L_TOT(5) = L_TT(5)+L_GT(5)+L_BM(5)+L_FFG(5)+L_LOV(5);

 

 

!Man kan inte avverka mer än vad som finns i respektive avdelning;

!****************************************************************;

@for(Avd(i): @SUM(Per(t): Andel(i,t)) <= 1);

 

 

! Inlager ska inte vara lagre an kritiska granser;

! ***********************************************;

@for(Per(t):  L_TT(t)  >= 1000);

@for(Per(t):  L_GT(t)  >= 1000);

@for(Per(t):  L_BM(t)  >= 1000);

@for(Per(t):  L_FFG(t) >= 1000);

@for(Per(t):  L_LOV(t) >=  500);

 

! Inlager ska inte vara foer hoega;

! ********************************;

!@for(Per(t):  L_TT(t)  <= 3000);

!@for(Per(t):  L_GT(t)  <= 3000);

!@for(Per(t):  L_BM(t)  <= 2600);

!@for(Per(t):  L_FFG(t) <= 2600);

!@for(Per(t):  L_LOV(t) <= 2000);

 

! InLager + Avverkning - Utlager - Bestallning = 0 for alla sortiment och perioder;

!*********************************************************************************;

@for(Per(t):  L_TT(t) + @SUM(Avd(i): Andel(i,t)*TT(i)) - L_TT(t+1) - B_TT(t) = 0);

@for(Per(t):  L_GT(t) + @SUM(Avd(i): Andel(i,t)*GT(i)) - L_GT(t+1) - B_GT(t) = 0);

@for(Per(t):  L_BM(t) + @SUM(Avd(i): Andel(i,t)*BM(i)) - L_BM(t+1) - B_BM(t) = 0);

@for(Per(t):  L_FFG(t) + @SUM(Avd(i): Andel(i,t)*FFG(i)) - L_FFG(t+1) - B_FFG(t) = 0);

@for(Per(t):  L_LOV(t) + @SUM(Avd(i): Andel(i,t)*LOV(i)) - L_LOV(t+1) - B_LOV(t) = 0);

 

 

! Ingaende lagernivaer i period 1 (September);

! *******************************************;

L_TT(1)  = 1772;

L_GT(1)  = 1619;

L_BM(1)  = 1391;

L_FFG(1) = 1097;

L_LOV(1) =  635;

 

! Utgående lager i period 4 = Ingående lager i period 5 (Januari);

! ***************************************************************;

L_TT(5) =  1500;

L_GT(5) =  1500;

L_BM(5) =  1500;

L_FFG(5) = 1500;

L_LOV(5) = 1000;

 

 

! Bestallningar i period 1 (September);

! ************************************;

B_TT(1)  = 7000;

B_GT(1)  = 4000;

B_BM(1)  = 6000;

B_FFG(1) = 4000;

B_LOV(1) =  800;

 

! Bestallningar i period 2 (Oktober);

! **********************************;

B_TT(2)  = 6000;

B_GT(2)  = 6400;

B_BM(2)  = 5000;

B_FFG(2) = 5500;

B_LOV(2) =  800;

 

! Bestallningar i period 3 (November);

! ***********************************;

B_TT(3)  = 8000;

B_GT(3)  = 5700;

B_BM(3)  = 8000;

B_FFG(3) = 4400;

B_LOV(3) =  800;

 

! Bestallningar i period 4 (December);

! ***********************************;

B_TT(4)  = 8500;

B_GT(4)  = 5300;

B_BM(4)  = 5500;

B_FFG(4) = 5500;

B_LOV(4) = 1200;

 

 

DATA:

 

ID,HFSIFFRA,TERRBSIFFRA,M3F_TOT,TT,GT,BM,FFG,LOV,DAGAR,VSIFFRA =

@OLE('C:\SCA\SCA_Logistik_2007.XLS');

 

@OLE( 'C:\SCA\SCA_Resultat.XLS') = L_TT, L_GT, L_BM, L_FFG, L_LOV, L_TOT,

                                   B_TT, B_GT, B_BM, B_FFG, B_LOV,

                                   ANDEL, TERRBSIFFRA, VSIFFRA,

                                   GAVOL, SAVOL, TK, DRIVNK, LAGK,

                                   SADAGAR, GADAGAR;

 

ENDDATA

 

end

 

 

 

 

#2. Ökad lagringskostnad i september och oktober för talltimmer och grantimmer

 

 

! SCA_Logistik_Lohmander_2007;

! Peter Lohmander; 

! 20071014;

 

! Denna modell är en uppdaterad version av den version som användes 20071012.

! Under den genomgangen mottogs flera konstruktiva forslag och aktuella forutsattningar;

! gallande skogsforvaltning inom SCA av forvaltare Magnus Bergman samt ;

! utvecklingschef Karl Larsson. Narvarande studenter pa jagmastarprogrammet bidrog

! med vardeulla kontroller av vissa delresultat vilka visade sig bli orimliga;

! med den tidigare versionen av modellen. Dessa kommentarer och bidrag har pa ;

! ett avgorande satt forbattrat denna modell och gjort den mer relevant for de ;

! aktuella fragestallningarna. Varmt Tack fran Peter Lohmander.;

 

 

Model:

 

! Relevant data are taken from the file SCA_Logistik 2007.xls  ;

 

SETS:

 

man/sep,okt,nov,dec,jan/:L_TT,L_GT,L_BM,L_FFG,L_LOV,L_TOT,

                         B_TT,B_GT,B_BM,B_FFG,B_LOV;

 

Avd/1..166/: ID,HFSIFFRA,TERRBSIFFRA,M3F_TOT,TT,GT,BM,FFG,LOV,DAGAR,VSIFFRA,GA;

 

Per/sep, okt, nov, dec/:GAVOL, SAVOL, Disk, GADAGAR, SADAGAR;

PerAvd(Avd, Per):Andel, costperm3;

 

ENDSETS

 

 

! Malfunktion;

! Vi minimerar nuvardet av den totala kostnaden. ;

! Vi anvander foretagets egen redovisade kalkylranta, 6.5% per year;

! Perrate beraknas som rantan for en manad. Alla kostander antages uppsta

  mitt i respektive period (manad).;

! All diskontering sker till mitten av period 0, d.v.s. Augusti 15.;

 

(1+perrate)^12 = 1.065;

@for(Per(t): Disk(t) = 1/(1+perrate)^t);

 

! En val definiera ekonomisk malfunktion forutsatter att

  kostnaderna foer drivning och vagtransport fran de olika objekten aer

  kalkylerade for alternativa perioder och finns tillgangliga i en tabell.;

! En sadan hypotetisk kostnadstabell har inkluderats i denna datormodell

  eftersom en sadan tabell saknades i det befintliga tabellunderlaget.;

 

@for(PerAvd(i,t): costperm3(i,t) = 90);

 

min = TK;

 

TK = DrivnK + LagK;

 

DrivnK = @SUM(PerAvd(i,t):Disk(t)*costperm3(i,t)*Andel(i,t)*M3F_TOT(i));

 

 

!LagK = @SUM(Per(t): Disk(t)*(10*L_TT(t)+10*L_GT(t)+10*L_BM(t)+10*L_FFG(t)+10*L_LOV(t)));

 

LagKso = @SUM(Per(t)| t#LE#2: Disk(t)*(20*L_TT(t)+15*L_GT(t)+10*L_BM(t)+10*L_FFG(t)+10*L_LOV(t)));

 

 

LagKnd = @SUM(Per(t)| t#GT#2: Disk(t)*(10*L_TT(t)+10*L_GT(t)+10*L_BM(t)+10*L_FFG(t)+10*L_LOV(t)));

 

 

LagK = LagKso + LagKnd;

 

 

 

 

!Det finns en mojlighet att definiera alla avverkningar som heltal.;

!Det ar dock oftast ej ekonomiskt optimalt att gora detta.

!Det ar vanligen optimalt att starta vissa operationer under en period

 och avsluta dem under nasta period. ;

!*********************************************************************;

!@for( PerAvd(i,t): @BIN(Andel(i,t)));

 

 

! GA(i) definieras som 1 om gallringsmaskiner kan anvandas, annars 0.;

!Gallringsmaskinlag hanterar huggningsformerna HF1 och HF7;

!Slutavverkningsmaskinlag hanterar HF2-HF6 samt HF8;

@for(Avd(i)| HFSIFFRA#EQ#1 :GA(i) = 1);

@for(Avd(i)| HFSIFFRA#EQ#7 :GA(i) = 1);

@for(Avd(i)| HFSIFFRA#GE#2 #AND# HFSIFFRA#LE#6:GA(i) = 0);

@for(Avd(i)| HFSIFFRA#EQ#8 :GA(i) = 0);

 

 

!Drivning med gallringsmaskinlag;

@for(Per(t): GAVOL(t) = @SUM(Avd(i): GA(i)*Andel(i,t)*M3F_TOT(i)));

 

!Drivning med slutavverkningsmaskinlag;

@for(Per(t): SAVOL(t) = @SUM(Avd(i): (1-GA(i))*Andel(i,t)*M3F_TOT(i)));

 

!Berakning av antal dagar som gallringslagen anvandes under olika manader;

@for(Per(t): GADAGAR(t) = @SUM(Avd(i):GA(i)*Andel(i,t)*DAGAR(i)));

 

!Berakning av antal dagar som slutavverkningslagen anvandes under olika manader;

@for(Per(t): SADAGAR(t) = @SUM(Avd(i):(1-GA(i))*Andel(i,t)*DAGAR(i)));

 

!Gallringsmaskinlagen har begransade kapaciteter i varje period;

[GADAG_S] GADAGAR(1) <= 3*20;

[GADAG_O] GADAGAR(2) <= 3*23;

[GADAG_N] GADAGAR(3) <= 3*22;

[GADAG_D] GADAGAR(4) <= 3*19;

 

 

!Gallringsmaskinlagen vill helst undvika alltfor stora neddragningar av verksamheten;

[GADAG_SL] GADAGAR(1) >= 3*20*0.8;

[GADAG_OL] GADAGAR(2) >= 3*23*0.8;

[GADAG_NL] GADAGAR(3) >= 3*22*0.8;

[GADAG_DL] GADAGAR(4) >= 3*19*0.8;

 

 

!Slutavverkningsmaskinlagen har begransade kapaciteter i varje period;

[SADAG_S] SADAGAR(1) <= 4*20;

[SADAG_O] SADAGAR(2) <= 4*23;

[SADAG_N] SADAGAR(3) <= 4*22;

[SADAG_D] SADAGAR(4) <= 4*19;

 

!Slutavverkningsmaskinlagen vill helst undvika alltfor stora neddragningar av verksamheten;

[SADAG_SL] SADAGAR(1) >= 4*20*0.8;

[SADAG_OL] SADAGAR(2) >= 4*23*0.8;

[SADAG_NL] SADAGAR(3) >= 4*22*0.8;

[SADAG_DL] SADAGAR(4) >= 4*19*0.8;

 

!Alternativa metoder motsvarar HF8. Viss volym av detta skall drivas.;

!Just nu bortser vi fran den restriktionen men den kan enkelt inkluderas;

 

 

!Alla vagar ar ej farbara alla perioder;

!**************************************;

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,1) = 0);

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,2) = 0);

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,3) = 0);

 

!Alla avverkningsobjekt har ej acceptabel baerighet alla perioder;

!****************************************************************;

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,1) = 0);

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,2) = 0);

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,3) = 0);

 

! Total avverkning;

! ****************;

!TotAvv = @sum(Avd(i): @sum(Per(t): Andel(i,t)*M3F_TOT(i)));

 

! Total bestallning;

! *****************;

!TotBest = @sum(Per(t): B_TT(t)+B_GT(t)+B_BM(t)+B_FFG(t)+B_LOV(t));

 

! Total lagerfoerandring;

! **********************;

!TotLF = TotAvv - TotBest;

!@FREE(TotLF);

 

! Kontroll av total lagerfoerandring;

! **********************************;

!CheckLF = L_TOT(5) - L_TOT(1);

!@FREE(CheckLF);

! Det visade sig att TotLF överstiger CheckLF beroende på att TotLF bygger på

  tabellvärden i kolumnen M3F_TOT. Om man summerar de olika sortimenten så blir

  summan av dem lagre an den totalt angivna volymen. Detta kan bero på att

  delar av den totala volymen ska lamnas i skogen eller ej kan klassificeras som de

  olika sortimenten.;

 

! Totala lager;

! ************;

@for(Per(t): L_TOT(t) = L_TT(t)+L_GT(t)+L_BM(t)+L_FFG(t)+L_LOV(t) );

L_TOT(5) = L_TT(5)+L_GT(5)+L_BM(5)+L_FFG(5)+L_LOV(5);

 

 

!Man kan inte avverka mer än vad som finns i respektive avdelning;

!****************************************************************;

@for(Avd(i): @SUM(Per(t): Andel(i,t)) <= 1);

 

 

! Inlager ska inte vara lagre an kritiska granser;

! ***********************************************;

@for(Per(t):  L_TT(t)  >= 1000);

@for(Per(t):  L_GT(t)  >= 1000);

@for(Per(t):  L_BM(t)  >= 1000);

@for(Per(t):  L_FFG(t) >= 1000);

@for(Per(t):  L_LOV(t) >=  500);

 

! Inlager ska inte vara foer hoega;

! ********************************;

!@for(Per(t):  L_TT(t)  <= 3000);

!@for(Per(t):  L_GT(t)  <= 3000);

!@for(Per(t):  L_BM(t)  <= 2600);

!@for(Per(t):  L_FFG(t) <= 2600);

!@for(Per(t):  L_LOV(t) <= 2000);

 

! InLager + Avverkning - Utlager - Bestallning = 0 for alla sortiment och perioder;

!*********************************************************************************;

@for(Per(t):  L_TT(t) + @SUM(Avd(i): Andel(i,t)*TT(i)) - L_TT(t+1) - B_TT(t) = 0);

@for(Per(t):  L_GT(t) + @SUM(Avd(i): Andel(i,t)*GT(i)) - L_GT(t+1) - B_GT(t) = 0);

@for(Per(t):  L_BM(t) + @SUM(Avd(i): Andel(i,t)*BM(i)) - L_BM(t+1) - B_BM(t) = 0);

@for(Per(t):  L_FFG(t) + @SUM(Avd(i): Andel(i,t)*FFG(i)) - L_FFG(t+1) - B_FFG(t) = 0);

@for(Per(t):  L_LOV(t) + @SUM(Avd(i): Andel(i,t)*LOV(i)) - L_LOV(t+1) - B_LOV(t) = 0);

 

 

! Ingaende lagernivaer i period 1 (September);

! *******************************************;

L_TT(1)  = 1772;

L_GT(1)  = 1619;

L_BM(1)  = 1391;

L_FFG(1) = 1097;

L_LOV(1) =  635;

 

! Utgående lager i period 4 = Ingående lager i period 5 (Januari);

! ***************************************************************;

L_TT(5) =  1500;

L_GT(5) =  1500;

L_BM(5) =  1500;

L_FFG(5) = 1500;

L_LOV(5) = 1000;

 

 

! Bestallningar i period 1 (September);

! ************************************;

B_TT(1)  = 7000;

B_GT(1)  = 4000;

B_BM(1)  = 6000;

B_FFG(1) = 4000;

B_LOV(1) =  800;

 

! Bestallningar i period 2 (Oktober);

! **********************************;

B_TT(2)  = 6000;

B_GT(2)  = 6400;

B_BM(2)  = 5000;

B_FFG(2) = 5500;

B_LOV(2) =  800;

 

! Bestallningar i period 3 (November);

! ***********************************;

B_TT(3)  = 8000;

B_GT(3)  = 5700;

B_BM(3)  = 8000;

B_FFG(3) = 4400;

B_LOV(3) =  800;

 

! Bestallningar i period 4 (December);

! ***********************************;

B_TT(4)  = 8500;

B_GT(4)  = 5300;

B_BM(4)  = 5500;

B_FFG(4) = 5500;

B_LOV(4) = 1200;

 

 

DATA:

 

ID,HFSIFFRA,TERRBSIFFRA,M3F_TOT,TT,GT,BM,FFG,LOV,DAGAR,VSIFFRA =

@OLE('C:\SCA\SCA_Logistik_2007.XLS');

 

@OLE( 'C:\SCA\SCA_Resultat.XLS') = L_TT, L_GT, L_BM, L_FFG, L_LOV, L_TOT,

                                   B_TT, B_GT, B_BM, B_FFG, B_LOV,

                                   ANDEL, TERRBSIFFRA, VSIFFRA,

                                   GAVOL, SAVOL, TK, DRIVNK, LAGK,

                                   SADAGAR, GADAGAR;

 

ENDDATA

 

end

 

 

#3. Import av talltimmer upphör från och med November

! SCA_Logistik_Lohmander_2007;

! Peter Lohmander; 

! 20071014;

 

! Denna modell är en uppdaterad version av den version som användes 20071012.

! Under den genomgangen mottogs flera konstruktiva forslag och aktuella forutsattningar;

! gallande skogsforvaltning inom SCA av forvaltare Magnus Bergman samt ;

! utvecklingschef Karl Larsson. Narvarande studenter pa jagmastarprogrammet bidrog

! med vardeulla kontroller av vissa delresultat vilka visade sig bli orimliga;

! med den tidigare versionen av modellen. Dessa kommentarer och bidrag har pa ;

! ett avgorande satt forbattrat denna modell och gjort den mer relevant for de ;

! aktuella fragestallningarna. Varmt Tack fran Peter Lohmander.;

 

 

Model:

 

! Relevant data are taken from the file SCA_Logistik 2007.xls  ;

 

SETS:

 

man/sep,okt,nov,dec,jan/:L_TT,L_GT,L_BM,L_FFG,L_LOV,L_TOT,

                         B_TT,B_GT,B_BM,B_FFG,B_LOV;

 

Avd/1..166/: ID,HFSIFFRA,TERRBSIFFRA,M3F_TOT,TT,GT,BM,FFG,LOV,DAGAR,VSIFFRA,GA;

 

Per/sep, okt, nov, dec/:GAVOL, SAVOL, Disk, GADAGAR, SADAGAR;

PerAvd(Avd, Per):Andel, costperm3;

 

ENDSETS

 

 

! Malfunktion;

! Vi minimerar nuvardet av den totala kostnaden. ;

! Vi anvander foretagets egen redovisade kalkylranta, 6.5% per year;

! Perrate beraknas som rantan for en manad. Alla kostander antages uppsta

  mitt i respektive period (manad).;

! All diskontering sker till mitten av period 0, d.v.s. Augusti 15.;

 

(1+perrate)^12 = 1.065;

@for(Per(t): Disk(t) = 1/(1+perrate)^t);

 

! En val definiera ekonomisk malfunktion forutsatter att

  kostnaderna foer drivning och vagtransport fran de olika objekten aer

  kalkylerade for alternativa perioder och finns tillgangliga i en tabell.;

! En sadan hypotetisk kostnadstabell har inkluderats i denna datormodell

  eftersom en sadan tabell saknades i det befintliga tabellunderlaget.;

 

@for(PerAvd(i,t): costperm3(i,t) = 90);

 

min = TK;

 

TK = DrivnK + LagK;

 

DrivnK = @SUM(PerAvd(i,t):Disk(t)*costperm3(i,t)*Andel(i,t)*M3F_TOT(i));

 

LagK = @SUM(Per(t): Disk(t)*(10*L_TT(t)+10*L_GT(t)+10*L_BM(t)+10*L_FFG(t)+10*L_LOV(t)));

 

!Det finns en mojlighet att definiera alla avverkningar som heltal.;

!Det ar dock oftast ej ekonomiskt optimalt att gora detta.

!Det ar vanligen optimalt att starta vissa operationer under en period

 och avsluta dem under nasta period. ;

!*********************************************************************;

!@for( PerAvd(i,t): @BIN(Andel(i,t)));

 

 

! GA(i) definieras som 1 om gallringsmaskiner kan anvandas, annars 0.;

!Gallringsmaskinlag hanterar huggningsformerna HF1 och HF7;

!Slutavverkningsmaskinlag hanterar HF2-HF6 samt HF8;

@for(Avd(i)| HFSIFFRA#EQ#1 :GA(i) = 1);

@for(Avd(i)| HFSIFFRA#EQ#7 :GA(i) = 1);

@for(Avd(i)| HFSIFFRA#GE#2 #AND# HFSIFFRA#LE#6:GA(i) = 0);

@for(Avd(i)| HFSIFFRA#EQ#8 :GA(i) = 0);

 

 

!Drivning med gallringsmaskinlag;

@for(Per(t): GAVOL(t) = @SUM(Avd(i): GA(i)*Andel(i,t)*M3F_TOT(i)));

 

!Drivning med slutavverkningsmaskinlag;

@for(Per(t): SAVOL(t) = @SUM(Avd(i): (1-GA(i))*Andel(i,t)*M3F_TOT(i)));

 

!Berakning av antal dagar som gallringslagen anvandes under olika manader;

@for(Per(t): GADAGAR(t) = @SUM(Avd(i):GA(i)*Andel(i,t)*DAGAR(i)));

 

!Berakning av antal dagar som slutavverkningslagen anvandes under olika manader;

@for(Per(t): SADAGAR(t) = @SUM(Avd(i):(1-GA(i))*Andel(i,t)*DAGAR(i)));

 

!Gallringsmaskinlagen har begransade kapaciteter i varje period;

[GADAG_S] GADAGAR(1) <= 3*20;

[GADAG_O] GADAGAR(2) <= 3*23;

[GADAG_N] GADAGAR(3) <= 3*22;

[GADAG_D] GADAGAR(4) <= 3*19;

 

 

!Gallringsmaskinlagen vill helst undvika alltfor stora neddragningar av verksamheten;

[GADAG_SL] GADAGAR(1) >= 3*20*0.8;

[GADAG_OL] GADAGAR(2) >= 3*23*0.8;

[GADAG_NL] GADAGAR(3) >= 3*22*0.8;

[GADAG_DL] GADAGAR(4) >= 3*19*0.8;

 

 

!Slutavverkningsmaskinlagen har begransade kapaciteter i varje period;

[SADAG_S] SADAGAR(1) <= 4*20;

[SADAG_O] SADAGAR(2) <= 4*23;

[SADAG_N] SADAGAR(3) <= 4*22;

[SADAG_D] SADAGAR(4) <= 4*19;

 

!Slutavverkningsmaskinlagen vill helst undvika alltfor stora neddragningar av verksamheten;

[SADAG_SL] SADAGAR(1) >= 4*20*0.8;

[SADAG_OL] SADAGAR(2) >= 4*23*0.8;

[SADAG_NL] SADAGAR(3) >= 4*22*0.8;

[SADAG_DL] SADAGAR(4) >= 4*19*0.8;

 

!Alternativa metoder motsvarar HF8. Viss volym av detta skall drivas.;

!Just nu bortser vi fran den restriktionen men den kan enkelt inkluderas;

 

 

!Alla vagar ar ej farbara alla perioder;

!**************************************;

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,1) = 0);

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,2) = 0);

@for(Avd(i)| VSIFFRA(i)#GE#4 : Andel(i,3) = 0);

 

!Alla avverkningsobjekt har ej acceptabel baerighet alla perioder;

!****************************************************************;

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,1) = 0);

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,2) = 0);

@for(Avd(i)| TERRBSIFFRA(i)#GE#4 : Andel(i,3) = 0);

 

! Total avverkning;

! ****************;

!TotAvv = @sum(Avd(i): @sum(Per(t): Andel(i,t)*M3F_TOT(i)));

 

! Total bestallning;

! *****************;

!TotBest = @sum(Per(t): B_TT(t)+B_GT(t)+B_BM(t)+B_FFG(t)+B_LOV(t));

 

! Total lagerfoerandring;

! **********************;

!TotLF = TotAvv - TotBest;

!@FREE(TotLF);

 

! Kontroll av total lagerfoerandring;

! **********************************;

!CheckLF = L_TOT(5) - L_TOT(1);

!@FREE(CheckLF);

! Det visade sig att TotLF överstiger CheckLF beroende på att TotLF bygger på

  tabellvärden i kolumnen M3F_TOT. Om man summerar de olika sortimenten så blir

  summan av dem lagre an den totalt angivna volymen. Detta kan bero på att

  delar av den totala volymen ska lamnas i skogen eller ej kan klassificeras som de

  olika sortimenten.;

 

! Totala lager;

! ************;

@for(Per(t): L_TOT(t) = L_TT(t)+L_GT(t)+L_BM(t)+L_FFG(t)+L_LOV(t) );

L_TOT(5) = L_TT(5)+L_GT(5)+L_BM(5)+L_FFG(5)+L_LOV(5);

 

 

!Man kan inte avverka mer än vad som finns i respektive avdelning;

!****************************************************************;

@for(Avd(i): @SUM(Per(t): Andel(i,t)) <= 1);

 

 

! Inlager ska inte vara lagre an kritiska granser;

! ***********************************************;

@for(Per(t):  L_TT(t)  >= 1000);

@for(Per(t):  L_GT(t)  >= 1000);

@for(Per(t):  L_BM(t)  >= 1000);

@for(Per(t):  L_FFG(t) >= 1000);

@for(Per(t):  L_LOV(t) >=  500);

 

! Inlager ska inte vara foer hoega;

! ********************************;

!@for(Per(t):  L_TT(t)  <= 3000);

!@for(Per(t):  L_GT(t)  <= 3000);

!@for(Per(t):  L_BM(t)  <= 2600);

!@for(Per(t):  L_FFG(t) <= 2600);

!@for(Per(t):  L_LOV(t) <= 2000);

 

! InLager + Avverkning - Utlager - Bestallning = 0 for alla sortiment och perioder;

!*********************************************************************************;

@for(Per(t):  L_TT(t) + @SUM(Avd(i): Andel(i,t)*TT(i)) - L_TT(t+1) - B_TT(t) = 0);

@for(Per(t):  L_GT(t) + @SUM(Avd(i): Andel(i,t)*GT(i)) - L_GT(t+1) - B_GT(t) = 0);

@for(Per(t):  L_BM(t) + @SUM(Avd(i): Andel(i,t)*BM(i)) - L_BM(t+1) - B_BM(t) = 0);

@for(Per(t):  L_FFG(t) + @SUM(Avd(i): Andel(i,t)*FFG(i)) - L_FFG(t+1) - B_FFG(t) = 0);

@for(Per(t):  L_LOV(t) + @SUM(Avd(i): Andel(i,t)*LOV(i)) - L_LOV(t+1) - B_LOV(t) = 0);

 

 

! Ingaende lagernivaer i period 1 (September);

! *******************************************;

L_TT(1)  = 1772;

L_GT(1)  = 1619;

L_BM(1)  = 1391;

L_FFG(1) = 1097;

L_LOV(1) =  635;

 

! Utgående lager i period 4 = Ingående lager i period 5 (Januari);

! ***************************************************************;

L_TT(5) =  1500;

L_GT(5) =  1500;

L_BM(5) =  1500;

L_FFG(5) = 1500;

L_LOV(5) = 1000;

 

 

! Bestallningar i period 1 (September);

! ************************************;

B_TT(1)  = 7000;

B_GT(1)  = 4000;

B_BM(1)  = 6000;

B_FFG(1) = 4000;

B_LOV(1) =  800;

 

! Bestallningar i period 2 (Oktober);

! **********************************;

B_TT(2)  = 6000;

B_GT(2)  = 6400;

B_BM(2)  = 5000;

B_FFG(2) = 5500;

B_LOV(2) =  800;

 

! Bestallningar i period 3 (November);

! ***********************************;

B_TT(3)  = 8000*1.2;

B_GT(3)  = 5700;

B_BM(3)  = 8000;

B_FFG(3) = 4400;

B_LOV(3) =  800;

 

! Bestallningar i period 4 (December);

! ***********************************;

B_TT(4)  = 8500*1.2;

B_GT(4)  = 5300;

B_BM(4)  = 5500;

B_FFG(4) = 5500;

B_LOV(4) = 1200;

 

 

DATA:

 

ID,HFSIFFRA,TERRBSIFFRA,M3F_TOT,TT,GT,BM,FFG,LOV,DAGAR,VSIFFRA =

@OLE('C:\SCA\SCA_Logistik_2007.XLS');

 

@OLE( 'C:\SCA\SCA_Resultat.XLS') = L_TT, L_GT, L_BM, L_FFG, L_LOV, L_TOT,

                                   B_TT, B_GT, B_BM, B_FFG, B_LOV,

                                   ANDEL, TERRBSIFFRA, VSIFFRA,

                                   GAVOL, SAVOL, TK, DRIVNK, LAGK,

                                   SADAGAR, GADAGAR;

 

ENDDATA

 

End

 

 

#4. Ökade räntekrav

 

Det visade sig att ändrade räntekrav inom stora intervall knappast ger några skillnader i det optimala programmet eftersom övriga kostnader och restriktioner betyder mer för lösningen.