Hatena::ブログ(Diary)

のらぐらま別館 このページをアンテナに追加 RSSフィード

2010-11-22 このエントリーを含むブックマーク

あっちwの世界に入り浸ってて現実世界不適応気味。

そんな感じで、あっちの世界での成果を少し文書にまとめてみました。

哲学宗教、認識論、オカルト、成功法則。そういうのが好きな人は是非読んでみてください。

ドライオーガズム きもちよかーw。

2010-08-10 1:nで強いアルゴリズム

1:nで強いアルゴリズムについて考察 17:28 1:nで強いアルゴリズムについて考察を含むブックマーク

1:1で強いアルゴリズムは提示した。

問題はこれには弱点があるということで、4日の間一回でも失敗すると、自爆テロを起こすので自滅しやすいのが性質だからだ。

とはいえ定数系応答のプログラムで、N:Nで戦う状況だとこれに勝つアルゴリズムを求めるのは非常に難しい。

簡単な解決法 運を天にまかせる 17:28 簡単な解決法 運を天にまかせるを含むブックマーク

ということで、ラフな解決アルゴリズムは、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による定数化が必要なので、こういうキャッシュ化処理を行って、定数メモを返すインプリにしてみた。

のんきものの性質 17:33 のんきものの性質を含むブックマーク

ただ、0−5000の一様分布処理なので、1日あたり500円ずつ損をしていく感じ。である以上寿命は20日以内。割と結構厳しい。

ただ、Slave2よりは、アルゴリズムとして強い。

1000-5000なら、Slave2と同等だが、乱数のばらつきでやはりSlave2よりは短命だと思う。しかし、この程度の分布だと、1:1最強を駆逐する力は弱そうではある。

アルゴリズム合成 17:35 アルゴリズム合成を含むブックマーク

以上の結論を踏まえると多数のプレイヤーがいるときは、のんきものを装い、1:1になったら牙をむき出すようなアルゴリズムが強いと思います。

ただ、コードを書き直すのが面倒くさいので、ファーザースタディということにして、皆さんにインプリをお任せしましょうw。

のんびり生きましょう 17:28 のんびり生きましょうを含むブックマーク

ということで、結論はいかがでしたでしょうか。

あんまり効率効率意って、本当の効率下げてるとつぶれちゃいますね。

おおらかなほうが生き残れる環境もあるってことですね。

ではでは。

添付ソースコード 17:54 添付ソースコードを含むブックマーク

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++;
		}
	}
}

2010-08-09 最低賃金とは何か?

需要供給曲線 16:04 需要供給曲線を含むブックマーク

ちょっとお話を蒸し返します。前回のお約束はさぼり。

エラー - Yahoo!ジオシティーズを一通り復習してください。

その上で、需要制約下の場合は、

f:id:noragrammer:20100809160208j:image

このぐらいの急激な傾きのある需要曲線を想定しているのだと言う認識を共有して欲しいです。

  • この条件が成立している場合、供給増が起きるなら価格の低下は激しくなるにもかかわらず、数量の増加は芳しくないため、総合的な指標である、価格*数量の低下という結果が導かれてしまうのです。
  • この話をきちんと定義してシナリオにしたのが、前回のお話ということです。
  • 経済学的な常識に従って言うと、生産性向上というのは、供給曲線の右もしくは下方向へのシフトです。つまり安く大量にできるようになったというのが、生産性向上の常識的解釈なのですが、現実にはこれは、利益の低下、GDPの減少を起こします。
  • つまり需要制約下では、生産性の向上というのは、価格の向上、取引数量の減少方向への変化のほうが、その原義に近いのです。
  • 生産性低下したほうが経営効率があがる。これが需要制約下の結論なのだと、発言している本意はここにあります。

某氏との討議 16:36 某氏との討議を含むブックマーク

  • 側が某氏です。
    • 側がのらの考えです。
  • 労働者の給料があがると、会社の利益が減るために、GDPが低下する。
    • いや、そんなことはない。会社と労働者間の分配の問題であり、GDPには影響しない。
    • むしろ、最低賃金を払えないような企業に利益を払うと、銀行に借金を返すため、マネタリーストックの減少効果のほうがはげしく、景気が悪化する可能性のほうが高い
    • 労働者最低賃金層なので、消費性向が高く、すぐに使うためGDPへの波及効果は高い。
  • でも失業率は悪化するでしょ?
    • 価格増で数量低下を導くので、それは否定できない。
    • しかし、金銭的なお話でいうと、8時間労働で稼いでいた賃金を7時間で稼ぐような変化になるので、金額的な総額は変らない。GDPが悪化するとは言えない。
    • 製品サービス市場において、供給が減少し、価格が上がり始めるため、まさにこれはインフレの原因になりうる。
  • 経営上大問題なんだよ。こんなので投資できるかぁ?
    • ちょっと待て。最低賃金前提の経営計画なのか?もう少し余裕を持った賃金計画でやるべきものじゃないのか?マージンのない計画ってそれはドリームだろ。
  • そうはいっても賃金が払えないのだ。つぶれろというのか?
    • 方法はいくつかあるが。人件費の総枠が決まっているなら、その総枠で買える人の時間の量が少し減るだけ。
    • 操業時間の減少、正社員のより一掃の活用で乗り切れるはずである。
    • 操業時間の減少は、製品、サービスの供給減を生むから、マクロ的にはインフレ要因。
  • 国が中小企業を食い物にする政策で反対だ
    • こういうのは別件で補助金がまた別に支給されるのが通常なので、あるいは公共事業費が、賃金上昇を折り込んで、総枠がアップするはずだから、あまり騒ぐほどのことじゃない。
  • こういう賃金上昇を国策で行うのは危険
    • なんとも言えない。
    • 原理的には、労働者の供給が過剰気味になる。
    • 賃金は上昇、製品、サービスの価格も上昇
    • 数量は減少
    • ここらへんを折り込むと、無理やりやるなら、いわゆる高失業率で不景気のスタグフレーション政策に陥る可能性が高いと認識する。

最低賃金の意味 16:36 最低賃金の意味を含むブックマーク

  • 前回のシミュレーションでいうと、最低賃金に相当するものは何かというと、3000円。この部分なのです。
  • これ以下のbidというのは、どうもなんというか、不公正な匂いのあるbidなのです。
  • とはいえ、レッドオーシャンですからね。戦争やっているところで、こんな奇麗事いってもなぁというところがあるんですよ。
  • しかし、こういうのがナシってのは非常に危険です。ですから、あるのは仕方ないんじゃないかなぁ。
  • ついでに、レッドオーシャンでの戦闘は、勝ち残りさえすれば、独占企業ですからね。儲けがっぽりでおいしくなるわけです。
  • である以上、がんばれとしかいいようがないんですよ。一見大赤字に見えてもね。

2010-08-08 1:1最強アルゴリズム

1:1最強アルゴリズムの紹介 12:33 1:1最強アルゴリズムの紹介を含むブックマーク

さて、解答の応募もないので、(あんだけカラムならこれぐらい簡単に解いてくれよ>某氏w)。

想定していた答えについて解説をはじめよう。

1:1アルゴリズムの構成、発想はどういうところからくるのかというと、

「1日3000円使う3日で9000円使う。仕事をしないと4日目には死んでしまう。」

つまり、これを前提に最適化ルールをインプリメントすることで、1:1最強アルゴリズムがつくれるのである。

もっというと4日の間、相手に仕事させなければ、自分が生き残れるので、1:1最強という理屈である。

4日の間に2000円稼ぐことができれば、5日目にも生きていれて、5日目からは3000円か5000円貰えばなんとかなるという理屈である。

つまり500,500,500,500,3000,3000,3000, こういうbid系列が最強となる。

インタフェース的には何日目かがわかったほうが良いので、

bid関数の呼び出し規約を変える必要がある。

// day is 1 origin integer 
long bid(int day){
    if ( day <= 4 ){
	return 500;
    } else {
        return 3000;
    }
}

これが最強アルゴリズムの初期コードになる。

1:1最強アルゴリズムの評価 12:33 1:1最強アルゴリズムの評価を含むブックマーク

つまり、モデルから導かれる答えは、時給600円の最低賃金より低い時給100円でBidすることが求められるということである。

賃金がフリーフォールするの意味がわかるだろうか?結果として証明しているつもりなのだが、読者の評価はいかがであろうか?

供給>需要の世界では、とにもかくにも滅私奉公の気合のある人材以外いらないという証明がこれから出てくる。

社会的な現象は、このコードから自働的に証明されているのだ。

これがレッドオーシャンであり、ドミナント戦略であり、大店法の真実である。

残存者利益を取りにいく戦略の実装コードである。

動物的な縄張り争いの実装コードである。

あるいは、資産家の子供以外は生き残れないという現代社会の病理の証明である。

ここでは賃金問題として定式化したので、労働者のお話に見えるが、コードの構造を良く見てみると、アルゴリズム主体を企業としてみると、大店法のような大規模資本家と中小家庭型店舗の戦いにも応用が利くのがわかる。

1:1アルゴリズムの穴 12:33 1:1アルゴリズムの穴を含むブックマーク

シンプルなコードはあれなのだが、厳密にはあれでは1:1最強ではありえない。

似たバリエーションである、

300,300,400,1000,3000,3000

こういうコードを出してくる相手と共倒れ(引き分け)に持ち込むための防御コードが実装されていないからだ。

防御のコードを入れると、こうなる。

long bid(int day){
    if ( day <= 4 && check(day)  ){
        return 1;
    } else if ( day <= 4 ) {
        return 500;
    } else {
        return 3000;
    }    
}
// asserts 
//day 1: 10000
//day 2: 7500
//day 3: 5000
//day 4: 2500
boolean check(int day){
    long diff = 12500-2500*day;
    return wallet < diff; 	
}

どうだろう、面白くなってきたであろうか?

時給は完全にフリーフォールしている。1円で相手をブロックして共倒れを狙うのが戦略である。

死を覚悟して相手と一緒につぶれる気合である。神風特攻隊の意思である。日本人魂の発露である。

このぐらいの気合を見せないと、縄張り争いでは勝てない。

これが自然界、資本主義ー市場万能主義が強制する、数学的な答である。

再度言うが、供給過剰の市場では市場は機能しない。価格はフリーフォールする。

これすらわかってないのに、経済学(笑)を振り回すのは頭を使わない愚か者でしかない。

もうちょっと続きます 12:33 もうちょっと続きますを含むブックマーク

1:1最強アルゴリズムは必ずしも1:nの時には強くないので(同種がいると生き残れない。)

その条件を折り込むお話を書かないと完結しません。もう少しお待ちください。

ただ、お話の本論としては、これで終わっています。

市場万能主義、構造改革主義のおぞましさを感じてくれれば十分です。

2010-08-07 前日のモデルからの論理的考察結果

Twitterでつぶやいたものを再編集 01:05 Twitterでつぶやいたものを再編集を含むブックマーク

  • http://d.hatena.ne.jp/noragrammer/20100805 この問題からの答えをつらつらと書いていこうと思う。モデルから出てくる答えなのだけど、このモデル自体は中学生でも理解できるぐらいの簡単なモデル。考えるのにも偏微分関数解析とかもいらない
  • 需要>供給のとき、競争は妥当であり、市場は機能する。
  • 需要<供給のとき、競争は不当であり、市場は機能しない
  • 例えば、10人の人が物品Aを各1個必要としているとしよう。11個目を作ってしまったら、その被害は計り知れない
  • つまり、賢い生産者なら、こっそりその生産品ぶっこわして、ゴミ箱に投げるのが正しいのだ。
  • もしも、それを1個でも、必要としている人に、あまっているからと、渡してしまうと、どうなるだろう?需要が9で生産が10になるのだ。そしてそれを繰り返していくとどうなるだろう?
  • つまりたった1個余計に生産したせいで、10個の品物の在庫の価値が0円になってしまうのだ。この生産者は、おそらく破産するしかないだろう。このぐらいに、供給過剰の打撃は厳しいのだ
  • 現実的な生産品の食べものとかは、そこまで厳しくはなかったりするが、まぁおなかに1個余計握り飯が入る程度の話だからねw。
  • 工業製品とかでは、この供給>需要状態になってしまった場合は致命的。猛烈にもうかるはずの計画がたった1個、余計になったところで、破滅へのヒキガネを引くことになる
  • こんなのは、農家やってる人にとってなら多分身についている感覚。納得いかない値段で売るぐらいなら、一番上からいいものだけ出荷して、あとは自家消費にまわすか、ゴミとして畑にそのまま放置するのが正しいのだ。豊作貧乏は、かくも恐ろしい
  • そして、そういう状況なのに、捨てるぐらいなら、タダでもってけと善意で配るやさしい農家のせいで、同じ農家の誰かが、廃業に追い込まれるのだ。
  • さて、続いて、供給>需要の場合、答えはワークシェアのような、きわめて共産的、社会主義的な答えが正しい答えになる。労働協約マンセーであり、働かないのが正義であり、怠惰は美徳である。
  • 供給>需要のときに、一生懸命働く労働者は、キチガイであり、同胞への裏切りであり、殺し合いへのヒキガネを引く、バカである。
  • 労働者の供給が需要を上回るとき、豊作貧乏モデルにより、労働者の厳密な価格は0円にまでフリーフォールする。競争市場が導く数学的な答えは、これ。
  • つまり、働く必要がない人間は、早々と市場から撤退して、労働需給を逼迫させるように、しない奴は、社会的な罪を犯しているのだ。働き者は悪人であり、罪びとである。
  • 時給200円でもよく働く労働者は、労働者のカガミである。が、ゆえに、供給>需要のときの最大の罪人なのだ。
  • さて、なのに企業は、ミクロの競争条件からは、とにかく生き残りを求められる。労働者もそうである。供給>需要での、競争は、生き残るための戦略は、最高効率での経営が答えだからだ。
  • 供給>需要の場合、正しい答えは談合であり、ワークシェアである。にもかかわらず、1円入札で仕事をとり、誰かが死んで、供給<需要になるのを待つのが、戦略として、ベストになるのだ
  • である以上、資本の蓄積量が、企業の寿命の決定的な差である。供給>需要の場合、大資本への寡占化が完了し、中小企業が全部なくなり、需要>供給になるまで、どんどんと破壊されるのが、論理的な帰結となる
  • 日本がデフレ政策を開始して20年。なぜ街の商店街がつぶれてイオンだけが生き残るのか?当たり前なのである。供給>需要の場合は、相手をつぶすこと以外に生き残る道はない。そこには共存共栄などという、甘っちょろい言葉を言う余裕なぞはないのである。
  • さてというわけで、そういう状況での正しい政策は何かについて言及しておく。
  • つまり、労働者の需要<供給という現状では、生活保護失業手当、ホームレスの保護、労働者の保護。これら全て、働かない社会的な無能者を保護していくのが実は正しいというのが、答えになる
  • ただし、問題は、財政赤字ということ。この財政赤字を気にして、プライマリーバランスを気にしながら、弱者保護をやるのであれば、それは、もっと自国を食いつぶす政策になる
  • つまり、いくらでも保護しますよ。安心して首になってください。ヒマな時間を趣味や文化活動に使ったらどうですか?という政策を、拡張財政で、大赤字でやりとげようとする意思があるなら、それはそれで経済学的に正しい答えになる
  • それはいつまで可能なんだというと、労働者の需要>供給になるまでである。そこまでは、一生懸命みんなで助け合って生きていこうよという、左翼、お花畑脳の言明が実はもっとも正しいところにあるのだ
  • おれ時給300円なみで働いているんだぞ。頑張ってるんだぞ。そこから税金を払って、そいつら社会的ゴミにお金貢いでいるのかよ。むっかつくーという価値観。正しいのだが間違っているのだ。
  • じゃあ、もう二人雇えばいいのだよ。そうやって労働需給を逼迫させないかぎり、労働者賃金は0円にまで落とされていく。サヤヨセされていくのが宿命、プログラムなのだ
  • よろしいだろうか。まとめ:供給>需要のとき、社会保障的な政策は正義である。需要>供給のとき、市場原理主義は正しい。社会保障的、計画主義的政策は悪である。
  • しかし、まぁ、こういう条件をきちんと理解しないで、需要>供給のときに社会主義政策をマンセーして、供給>需要のときに、新自由主義構造改革マンセーするのが、衆知というものだろうな。世界観ってのは、一瞬で切り替わるべきなんですよ。
  • とりあえず、いいたいことはひととおりいいましたw。