■
あっち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による定数化が必要なので、こういうキャッシュ化処理を行って、定数メモを返すインプリにしてみた。