■
あっちwの世界に入り浸ってて現実世界不適応気味。
そんな感じで、あっちの世界での成果を少し文書にまとめてみました。
哲学、宗教、認識論、オカルト、成功法則。そういうのが好きな人は是非読んでみてください。
ドライオーガズム きもちよかーw。
添付ソースコード
package jp.nora.economics.labor; import java.util.ArrayList; import java.util.Iterator; public class SlaveMaster { public class Slave { long wallet; Slave(){ init(); } String name(){ return getClass().getSimpleName(); } void init(){ wallet = 10000; } boolean spend(){ wallet -= 3000; return wallet < 0; } long bid(int day){ return 5000; } void getPayment(int day){ wallet += bid(day); } void recoverPayment(int day){ wallet -= bid(day); } long getWallet(){ return wallet; } } public class Slave2 extends Slave { long bid(int day){ return 3000; } } public class King extends Slave { long bid(int day){ if ( day <= 4 && check(day) ){ return 1; } else if ( day <= 4 ) { return 500; } else { return 3000; } } boolean check(int day){ long diff = 12500-2500*day; return wallet < diff; } } public class Nora extends Slave { ArrayList<Integer> c; void init(){ super.init(); c = new ArrayList<Integer>(); } long bid(int day){ while (c.size()<=day){ int v = (int)(Math.random()*5000)+1; c.add(new Integer(v)); } return c.get(day-1); } } ArrayList<Slave> slaves; void init(){ slaves = new ArrayList<Slave>(); slaves.add(new Slave()); // and so on. many instances slaves.add(new Slave2()); slaves.add(new King()); slaves.add(new Nora()); } void print(int day){ System.out.println("-----"); for(Slave s:slaves){ System.out.print(s.name()); System.out.print(" "); System.out.print(s.bid(day)); System.out.print(" "); System.out.println(s.getWallet()); } } void selection(int day){ Slave max = null; for (Slave s:slaves){ if ( max == null ) max = s; if ( max.bid(day) < s.bid(day)){ max = s; } s.getPayment(day); } max.recoverPayment(day); } boolean spendAll(){ boolean flag = false; for(Slave s:slaves){ flag |= s.spend(); } return flag; } void dead(){ Iterator<Slave> i = slaves.iterator(); while ( i.hasNext()){ Slave s = i.next(); if ( s.getWallet() < 0 ) { System.out.println(s.name()+":dead"); i.remove(); } } } public static void main(String args[]){ SlaveMaster sm = new SlaveMaster(); sm.init(); sm.run(); } public void run(){ while (slaves.size()> 1){ oneTrial(); reset(); } } void reset(){ for(Slave s:slaves){ s.init(); } } public void oneTrial(){ int day = 1; while ( true){ print(day); selection(day); if ( spendAll()){ dead(); return; } day++; } } }
のんびり生きましょう
ということで、結論はいかがでしたでしょうか。
あんまり効率効率意って、本当の効率下げてるとつぶれちゃいますね。
おおらかなほうが生き残れる環境もあるってことですね。
ではでは。
簡単な解決法 運を天にまかせる
ということで、ラフな解決アルゴリズムは、1−5000をランダムに入札し、仕事にあぶれたらお休みするような、そういうのんきなアルゴリズムが実は天敵になる。
この場合、1:1最強アルゴリズム系列が同時に2以上存在するなら、そいつらは、1:1のときまで生き残ってはいれず、より前に淘汰することになる。
1:1最強アルゴリズムがひとつしか入ってなくても、例えば10人ののんきものが生息していれば、結構勝負になる可能性が高い。
ただ、結果がランダムにふれるため実験結果もゆれることになる。
ArrayList c; void init(){ super.init(); c = new ArrayList<long>(); } int bid(int day){ while ( c.size()<=day ) c.setAt(day-1,(int)(java.Math.rand()*5000)+1); } return c.getAt(day-1); }
dayによる定数化が必要なので、こういうキャッシュ化処理を行って、定数メモを返すインプリにしてみた。