关于生产位置决策的NetLogo模型使收益呈指数增长

时间:2019-05-08 17:38:07

标签: netlogo agent-based-modeling economics

我创建了一个模型,试图以此模型来复制由自动化引起的返厂生产现象。 1.我遇到的一个特殊问题是,公司的资本呈指数增长,这使得仿真只能在某一点崩溃,因为NetLogo无法处理如此大的数字。 2.生产地点的决定取决于可产生的家庭利润与国外利润之间的比较。根据哪个较低,这些公司应该迁移到“全球北部”或“全球南部”。目前,无论我进行参数扫描如何,它们都只会向北移动。

我在这里根本找不到我的思想错误。任何人?提前非常感谢。

breed [ firms firm ]   ;; defines agentset and agents

globals [   ;; general parameters accessible by all agents from all across the world
  labour-unit   ;; either low-, high-skilled labour or robots
  high-skilled-labour-ratio ]   ;; defined through low-skilled-labour-ratio slider as the ratio of labour needs to be 1 in sum


firms-own [   ;; parameters belonging to agents only
  firm-size   ;; divides the firms by size according to their capital
  output    ;; amount of products produced (in units)
  max-level-of-automation    ;; maximal level of efficiency in automation for the specific product line of each firm
  labour-units-at-home   ;; number of workers employed at home
  labour-units-abroad   ;; number of workers employed abroad
  level-of-automation    ;; current efficiency in automation
  actual-low-skilled-labour-ratio   ;; defines the ratio of low-skilled in proportion to high-skilled labour and automation
  actual-high-skilled-labour-ratio   ;; defines the ratio of low-skilled in proportion to high-skilled labour and automation
  robots   ;; number of robots utilised for production
  low-skilled-labour   ;; number of low-skilled-workers (in number of persons) ASSUMPTION: Unlimited availability of low-skilled workers on the labour market
  high-skilled-labour   ;; number of high-skilled-workers (in number of persons) ASSUMPTION: Unlimited availability of high-skilled workers on the labour market
  raw-material-costs   ;; fix costs for raw materials
  budget-for-labour-costs   ;; planned budget available for paying labour wages
  actual-labour-costs   ;; actual budget spent on labour wages
  automation-costs   ;; costs for maintaining and running automated production (e.g. energy costs)
  capital   ;; assumed to be equal to the output (in €)
  revenue   ;; output multiplied by the price per product (in €)
  profit-at-home   ;; revenue minus R&D investment
  profit-abroad   ;; revenue minus R&D investment and foreign surcharges
  r&d-investment   ;; particular share of capital invested in R&D
  foreign-surcharges   ;; additional costs for firms producing abroad such as shipping costs or import tariffs
  relocation-costs   ;; share of profit which would be needed to relocate production
  offshored?   ;; true or false
  reshored?   ;; true or false
  relocated?   ;; true or false
]


to setup
  clear-all   ;; resets all global variables to zero
  clear-all-plots   ;; clears every plot in the model
  setup-economy   ;; create the world division in Germany and the producer countries in the global South
  setup-industry   ;; create the industry
  reset-ticks   ;; resets the tick counter to zero
end


to setup-economy   ;; sets up the geography of the model
  create-firms number-of-firms   ;; number of firms to be defined through slider
  ask patches with [ pycor > 0 ] [
    set pcolor 98 ]   ;; colours Germany in a shade of blue
  ask patches with [ pycor = 0 ] [
    set pcolor white ]   ;; colours the equator white
  ask patches with [ pycor < 0 ] [
  set pcolor 48 ]   ;; colours producing countries in the global South in a shade of yellow
end


to setup-industry   ;; sets up the economy of the model
  setup-firms   ;; see auxiliary code below
  offshoring   ;; defines the amount of firms which have decided to offshore in the past
  state-of-the-art   ;; see auxiliary code below
  costs-calculation   ;; see auxiliary code below
  labour-automation-ratio   ;; see auxiliary code below
  employment   ;; see auxiliary code below
  output-calculation   ;; see auxiliary code below
  revenue-calculation   ;; see auxiliary code below
  r&d-calculation   ;; see auxiliary code below
  profit-calculation   ;; see auxiliary code below
  firms-size-ratio   ;; see auxiliary code below
end


to go   ;; let's go...!!
  tick   ;; advances the tick counter by one
  ask firms [
    ifelse ( offshored? = false ) [
      set capital capital + profit-at-home ] [   ;; sum of the capital and profit (values from the previous time period)
      set capital capital + profit-abroad ] ]
  technological-progress   ;; see auxiliary code below
  costs-calculation
  labour-automation-ratio
  employment
  output-calculation
  revenue-calculation
  r&d-calculation
  profit-calculation
  location-decision   ;; see auxiliary code below
  firms-size-ratio
  bankruptcy
  if ticks = 500 [ stop ]   ;; makes the modell run the same length each simulation
end


to-report random-between [ min-num max-num ]   ;; auxiliary code
   report random-float (max-num - min-num) + min-num
end


to setup-firms   ;; auxiliary code: initial configuration of firms
  ask firms [
    set capital random 1000
    set max-level-of-automation 0 + random-float 1   ;; random between >0 and <1 and will stay fix, because it is unrealistic that it'll be technologically feasible to automise production of all products equally
    set level-of-automation 0 ]   ;; initially all firms have a random output
end


to offshoring   ;; auxiliary code: when it is less likely to automate the product line, the higher the incentive to offshore where manual labour is cheaper
  ask firms [
    set offshored? false   ;; initially all firms report that they have not offshored
    set reshored? false   ;; no firm has initially reshored
    set relocated? false   ;; no firm has initially relocated
    let offshored-firms ( min-n-of ( count firms * ( share-of-offshored-firms / 100 ) ) firms [ max-level-of-automation ] )   ;; specific share of all firms have decided to produce abroad (see: slider on interface)
      ask offshored-firms [
        setxy random-xcor random-between ( -10 ) -1   ;; spread randomly abroad
        set offshored? true ] ]
  ask firms with [ offshored? = false ] [
    setxy random-xcor random-between ( 10 ) 1 ]   ;; all firms at home are randomly spread across Germany
end


to state-of-the-art   ;; auxiliary code: firms' state of the art of technology
  ask n-of ( count firms * ( share-of-automated-firms / 100 ) ) firms [   ;; particular share of firms which already utilise automated robots
    set level-of-automation random-between ( 0.01 ) max-level-of-automation ]   ;; share of production tasks already automated but less than or equal to their maximum-level-of-automation
  ask firms [
    set color scale-color orange level-of-automation 0 1 ]   ;; firms are black when they are not automated and shade into a ligther orange the more their level of automation increases
end


to technological-progress   ;; auxiliary code: efficiency of automation increases proportional to R&D investment
  ask firms [
    ifelse ( ( level-of-automation + r&d-investment ) < max-level-of-automation ) [   ;; R&D investment cannot increase the level of automation beyond its maximum level
      set level-of-automation level-of-automation + r&d-investment ] [
      set level-of-automation max-level-of-automation  ] ]  ;; maximum of automation has been reached
  ask firms [
    set color scale-color orange level-of-automation 0 1 ]
end


to costs-calculation   ;; auxiliary code: capital is used for production costs and the costs for labour
  ask firms [
    set raw-material-costs capital * ( share-of-raw-material-costs / 100 )   ;; specific share of capital (t0) which is used for raw materials (to be defined in interface)
    set budget-for-labour-costs capital - raw-material-costs ]   ;; specific share of capital (t0) which is used for labour
end


to-report share-of-labour-costs   ;; auxiliary code: reports the share used for labour
  report ceiling ( 100 - share-of-raw-material-costs )
end


to labour-automation-ratio   ;; auxiliary code: labour is proportionally divided between the robots, low- and high-skilled labour defined through their ratio
  ask firms [
    set high-skilled-labour-ratio 1 - low-skilled-labour-ratio   ;; labour ratio adds up to 1 in its sum
    ifelse ( level-of-automation >= robots-kill-jobs-threshold ) [   ;; specific threshold defining the level of automation at which low-skilled labour becomes obsolete
      set actual-low-skilled-labour-ratio 0
      set actual-high-skilled-labour-ratio 1 - level-of-automation ] [
    set actual-low-skilled-labour-ratio ( 1 - level-of-automation ) * low-skilled-labour-ratio   ;; 1 labour unit is the sum of the low-, high-skilled-labour-ratio and the level-of-automation
    set actual-high-skilled-labour-ratio ( 1 - level-of-automation ) * high-skilled-labour-ratio ] ]
end


to employment   ;; auxiliary code: defines the type of labour units employed
  ask firms [
    ;; the ratios determine the varying shares of the three different types of labour units
    let share-of-robots budget-for-labour-costs * level-of-automation
    let share-of-low-skilled-labour budget-for-labour-costs * actual-low-skilled-labour-ratio   ;; defines how many workers can be employed dependening on the disposability of labour costs and the level of wages at home
    let share-of-high-skilled-labour budget-for-labour-costs * actual-high-skilled-labour-ratio
    ;; the disposibility of labour costs and the proportional shares of labour determine the actual number of the varying types of labour units at home by costs and wages
    ;floor: reports the largest integer less than or equal to the number as a decimal number would not be realistic here as the unit of measurment are people
    ifelse ( offshored? = false ) [
      set robots floor ( share-of-robots / robot-costs )
      set low-skilled-labour floor ( share-of-low-skilled-labour / wages-low-skilled-labour-at-home )
      set high-skilled-labour floor ( share-of-high-skilled-labour / wages-high-skilled-labour-at-home )
      set labour-units-at-home robots + low-skilled-labour + high-skilled-labour ] [
      ;; the disposibility of labour costs and the proportional shares of labour determine the actual number of the varying types of labour units abroad by costs and wages
      set robots floor ( share-of-robots / robot-costs )
      set low-skilled-labour floor ( share-of-low-skilled-labour / wages-low-skilled-labour-abroad )
      set high-skilled-labour floor ( share-of-high-skilled-labour / wages-high-skilled-labour-abroad )
      set labour-units-abroad robots + low-skilled-labour + high-skilled-labour ]
    ;; as no decimal number can be used to calculate the number of labour units the planned budget for labour costs and its actual amount differ
    ifelse ( offshored? = false ) [
      set actual-labour-costs (
        robots * robot-costs ) + (
        low-skilled-labour * wages-low-skilled-labour-at-home ) + (
        high-skilled-labour * wages-high-skilled-labour-at-home ) ] [
      set actual-labour-costs (
        robots * robot-costs ) + (
        low-skilled-labour * wages-low-skilled-labour-abroad ) + (
        high-skilled-labour * wages-high-skilled-labour-abroad ) ] ]
end


to output-calculation   ;; auxiliary code: each labour unit achieves to produce a specific amount of output which is defined through their productivity
  ask firms [
      set output ( ( low-skilled-labour + high-skilled-labour ) * labour-productivity ) + (   ;; amount of products produced per manual labour unit employed
      robots * robot-productivity ) ]  ;; amount of products produced per robot utilised
end


to revenue-calculation   ;; auxiliary code: it is assumed that all output is sold to the defined sales price of the product
  ask firms [
    set revenue output * sales-price-per-product ]
end


to r&d-calculation   ;; auxiliary code: share of revenue which is used for R&D investment
  ask firms [
    set r&d-investment revenue * ( share-for-r&d-investment / 100 )
    if level-of-automation = max-level-of-automation [
      set r&d-investment 0 ] ]
end


to profit-calculation   ;; auxiliary code: the profit calculation for the firms which produce at home and abroad differs due to additional costs for foreign surcharges
  ask firms [
    set foreign-surcharges revenue * ( share-for-foreign-surcharges / 100 )
    set profit-at-home revenue - raw-material-costs - actual-labour-costs - r&d-investment
    set profit-abroad revenue - raw-material-costs - actual-labour-costs - r&d-investment - foreign-surcharges ]
end


to location-decision   ;; auxiliary code: if the profit of a firm is smaller even after substracting relocation costs of its profit if it would relocate, than the relocation decision is: yes!
  ask firms with [ offshored? = false ] [
    set relocation-costs ( share-for-relocation-costs / 100 ) * profit-at-home   ;; share of profit which would be needed to relocate production
    if ( profit-at-home < ( profit-abroad - relocation-costs ) ) [
      move-to one-of patches with [ pcolor = 48 and not any? turtles-here ]
      set offshored? true
      set reshored? false
      set relocated? true ] ]
  ask firms with [ offshored? = true ] [
    set relocation-costs ( share-for-relocation-costs / 100 ) * profit-abroad
    if ( profit-abroad < ( profit-at-home - relocation-costs ) ) [
      move-to one-of patches with [ pcolor = 98 and not any? turtles-here ]
      set offshored? false
      set reshored? true
      set relocated? true ] ]
end

0 个答案:

没有答案