とある孤島の物語 アルゴリズム概要 ----------------------------------------------------- 外部変数 ・労働者A,Bそれぞれの初期賃金 ・2種類の商品それぞれの、初期生産量 ・消費者A.Bそれぞれの、消費需要量(商品A.B) ・消費性向(デフォルト値=100%の場合、貯蓄を考えない) ・労働者が賃金(労働量)を減らしてもよいと考える達成度(%) ----------------------------------------------------- メインループ概要 setout()関数 プログラム初期化 // オブジェクト生成 // 初期値設定(消費者の商品需要=食欲) // 労働者を生産工程に登録(入社) メインループここから [生産] 初期生産量または、調整された数量の商品を生産 賃金の支払い 商品を市場に登録(生産された数量・価格) 価格=生産工程の支払い賃金合計 / その生産工程の商品の生産数量 (ここだけ読むと、生産量が変更されたら、商品価格変わるように読めるけど、 調整方法によって分子も変わるので、プログラムの動作中に価格は変更されない。) 市場に消費者が訪れる。予算=今期の賃金 [交換] 下記参照 取引結果を表示 [調整] 下記参照 [初期化] 消費者の商品需要=食欲を初期値に再設定 当期の在庫クリア メインループここまで ----------------------------------------------------- 交換アルゴリズム Market.exchange()関数 購入順序は、消費者が市場でジャンケンをして決定する (物語上の仮定では、両方の生産者がそろわないと交換が始まらないので、  市場に先についた順番が先だった、という理由にはできないなあ。) プログラム上でも、到着順をランダムに決定 初期設定の需要個数だけ、賃金が足りるまで、商品を購入 達成率の計算方法 setAchievement()関数 とある消費者の達成率% = この消費者の今期購入した金額合計 / この消費者の需要を全て満たす場合に必要な金額 * 100  = {(購入数量*単価)商品毎の合計} / {(需要数量*単価)商品毎の合計} * 100 ----------------------------------------------------- 調整アルゴリズム Factory.feedback()関数 [商品を増産する調整] @商品の供給不足 (物語上の仮定)販売途中の「コミュニケーション」にて、あとどれくらい消費者が欲しているのか販売=生産者が知ることができる。 消費者が購入できなかった数量を、生産者が把握=供給不足を認識 A労働者がもっと働きたい場合。 (賃金不足で変えなかったので労働者が賃金を増やしたい金額/商品単価)個だけ増産しようと考える。 @かつAの場合、増産を決定 供給不足量または労働者の増産希望数量の、どちらか小さい方の増産量分だけ、次期生産量を増やす。 増えた生産数量*単価=次期労働者の賃金が上昇 ※この調整ルールのため、商品単価は初期値から変更されない。 [商品を減産する調整] @在庫がある場合 生産者は、在庫個数だけ次期生産数量を減らしても良いと考える。 ただし(物語上の仮定により)少なくても1個は生産する。 A労働者の達成率が、初期設定値より大きい場合 今期の賃金が残っていれば、労働者は次期の生産量を減らしてもよいと考える。休憩する。 (賃金の残高 / 商品単価)個だけ減産しようとする。 @かつAの場合、減産を決定 在庫個数とAのどちらか小さい個数だけ、次期の生産個数を減産する。 -----------------------------------------------------