csss-beedza/Source/helper-functions.nls

123 lines
3.0 KiB
Plaintext

;;;;;;;;;;;;;;;;;;;;;;
;; Helper functions ;;
;;;;;;;;;;;;;;;;;;;;;;
; beekeep-utility = honey-quant * (honey-price - prod-cost) - (travel-cost * distance * vehicles) - moving-cost
to-report beekeep-utility [hi ah d]
report (honey-quant hi ah) * ((honey-price hi) - prod-cost) - (travel-cost * d)
end
to-report honey-price [ hi ]
if hi = "PF" [ report 3.48 ] ; Polyflower
if hi = "AC" [ report 4.65 ] ; Accacia
if hi = "LM" [ report 4.65 ] ; Lime
if hi = "SF" [ report 2.32 ] ; Sunflower
; the following shouldn't happen
error 1
end
to-report prod-cost
report 100 / 25000 ; 1 hive = 25000 bees
end
; honey-quant = (bees-quant - 10000) * harv-index * uncertainty
to-report honey-quant [ hi amount-h ]
report (bees-quant - 10000) * (harv-index hi) * amount-h * uncertainty
end
to-report harv-index [ hi ]
ifelse flower-season
[ if hi = "AC" and acacia-season [ report 0.0000135 ] ; Acacia
if hi = "LM" and lime-season [ report 0.000018 ] ; Lime
if hi = "SF" and sunflower-season [ report 0.000006 ] ; Sunflower
report 0.000004 ; Polyflower
]
[ report 0.0 ]
; the following shouldn't happen
error 1
end
to-report acacia-season
if yearly-ticks > 119 + abegin-uncertainty and yearly-ticks < 150 + aend-uncertainty
[ report true ]
report false
end
to-report lime-season
if yearly-ticks > 150 + lbegin-uncertainty and yearly-ticks < 180 + lend-uncertainty
[ report true ]
report false
end
to-report sunflower-season
if yearly-ticks > 180 + sbegin-uncertainty and yearly-ticks < 211 + send-uncertainty
[ report true ]
report false
end
to-report flower-season
if yearly-ticks > 89 and yearly-ticks < 241
[ report true ]
report false
end
to-report uncertainty
report random-normal 1.0 harvesting-uncertainty
end
to-report bees-quant
ifelse ticks <= 21
[ report 2000 * ticks + 27000 ]
[ report 500 * ticks + 65000 ]
end
to-report color-flower [ hi ]
if hi = "PF" [ report VIOLET ] ; Polyflower
if hi = "AC" [ report RED ] ; Accacia
if hi = "LM" [ report LIME ] ; Lime
if hi = "SF" [ report YELLOW ] ; Sunflower
; the following shouldn't happen
error 1
end
to dailyRevenue
let N count beekeepers
; ifelse old-spot not empty? [
set old-spot min-one-of spots [distance myself]
let travel-distance distance old-spot
; ]
;[
; set travel-distance 0
;]
if any? spots-here [;flower-type [amount-of-hives] of myself (distance myself)
set sumOfallBeekeepersProfit (sumOfallBeekeepersProfit + beekeep-utility ([flower-type] of one-of spots-here) amount-of-hives travel-distance )
]
set averageProfit sumOfallBeekeepersProfit / N
end
to evaluation-procedure
dailyRevenue
individual-caract
end
to individual-caract
let travel-distance distance old-spot
set profit (profit + beekeep-utility ([flower-type] of one-of spots-here) amount-of-hives travel-distance )
set total-travel-distance (total-travel-distance + travel-distance )
end
to come-back
move-to old-spot
end