3期 ラムゼイ・シミュレーションモデル公開 (Ramsey 3)
ここ2,3日、非線形計画問題を解くプログラムをJAVAで書いていた。どうも年末ごろに、プログラム書きに没頭するという習癖がある。暇になるからかもしれない。昨日、一昨日と大学に出かけたが、事務もいなければ教員もほとんどいない。国立大学にいた時は、一応、仕事納めは28日ごろになっていたが。
昨日になって、準ニュートン法で無制約の非線形計画問題を解くJAVAのプログラムが出来上がった。
初めて、JAVAで本格的なプログラムを書いた。今までは、数値計算がらみは、Cで書くのが普通だったが、ついにオブジェクト指向言語に進化したわけだ。頭を結構、いや、強烈に切り替えなければならなかった。この年になると、こうした切り替えが億劫になる。これまでC++も含めて、なんども、オブジェクト指向に切り替えいようとしたのだが、クラスとかメソッドとか「なんでこんな面倒なものが必要なの!!」とすぐに放棄したわけだ。
しかし、やはり進化したものは進化したなりに優れている。JAVAでコーディングをすると、間違い、プログラムミスが劇的に減少した。あるいは、クラス(ないしはオブジェクト)というものの便利さを痛感した。これからは、Cを使わなくなる可能性が高い。なにしろ、JAVAはいい。OSに依存せずに動くというのもいい。たいがい、JAVAの実行環境は、しらずしらず、皆がインストールしている。
話は戻るが、準ニュートン法の私のプログラムは、変数の数の制約はなく、汎用性はあり、試験的によく知られた難しい非線形計画の問題もスラスラ解くようになった。そこで、もともと、このようなことをする動機である、温暖化対策統合シミュレーションをするという、目標に近づくために、簡単なラムゼーの動学的最適化モデルをこのプログラムで解かせることにした。
しかし、次のような制約がある。
(1)まだ制約条件(これが終わったら、制約条件付き準ニュートン法のプログラムを書くつもり)をつけられないので、完全に目的関数一本にしなければならない。
(2)Gradient(改善方向傾斜)の確定のために、微分係数が必要なのだが、数値微分が現状ではできないので、解析的に微分した関数を与えなければならない。
この二つの制約のために、ラムゼイモデルの期間数は最小限にとどめなければならない。かつ、消費が2期間のモデルにすると、終端期資本ストックを与えるために、最適消費が1期間に縮小してしまう。これでは、全く面白くもない。そこで、消費が3期間のモデルにせざるを得なくなった。だから、Ramsey3なのである。
モデルの数学的説明は、Ramsey3.pdfに説明されているのでご覧いただきたい。これ以上簡単化はできないというほどに、簡単化されてしまっているのがお分かりになるだろう。
JAVA用の実行プログラムramsey3.jar、設定ファイルramsey3.cfgなどがパックされたZIPファイル ramsey3.zipをダウンロードして、解凍していただきたい。JAVAの実行ファイル、ramsey3.jarと設定ファイルramsey3.cfgは、実行する同じフォルダになければならない。また、同梱のreadme.txtファイルに、OSごとの実行の仕方が書いてある。
Windowsのコマンドプロンプトで実行したイメージは、次のような感じである。ramsey3exec.gif
ramsey3.jarはWindows, MacOSX, Linuxのいずれでも動くことを確認している。ただし、私のLinuxでJAVAが古かったために、新しいものにアップグレードしなければならなかった。
設定ファイルを変更すると、結果が変わる。テキストエディタでramsey3.cfgで編集すればよい。λは1にしてはならないという制約はある。
また、プログラムの限界として、変数に制約条件がつかないので、設定値を変更すると、投資などが負の値になることがある。まあ、資本として使っていたものを消費に回すことはあり得るので、いいか、という感じですが。次期バージョンでは、不等式制約が使えるようにするのでお待ちください。
というわけで、もっとらしい答えを出したのだが、これが正しいかどうかが問題である。そこで、全く等価なモデルをエクセルのワークシート上に作成し、EXCELのソルバーで解いてみた。(Rmasey3.xlsにモデルが組み込まれている。解説付き)
見事に同じ解を出したので、どちらも正しいだろうという判定をした。
なお、GAMSでもプログラムを検証した。ramsey3.gms。同じ答えが出た。
(なお、これらのプログラムは極めて小さいので、GAMSの無料バージョンで解くことができる。そのサイトからダウンロードしてインストールすれば、無料バージョンのもの。有料は、単にライセンスファイルを購入するだけ。プログラム実態は有料も無料も同じなのである。大きなモデルはライセンスファイルなしには動かない。)
まあ、3期モデルなのでたいしたことはないのだが、重要なことは、生産関数や効用関数の各パラメータがどのような役割を果たすかが、実際それらのパラメータの値を変えてシミュレーションすることでわかってくることだ。とくに、λなどは、理論的には、Nordhausなども説明しているのだが、実際にやってみると実感できる。試みられたい。
上記のいろいろなファイルについての感想はメールで教えてください。
次は、制約条件付きの問題を解くことができる準ニュートン法をJAVAで作ることだが、数日以内にできるはずである。あと、数値微分をどう処理するかが、まだ展望を持っていない。まあ、なんとかなると思う。
昨日になって、準ニュートン法で無制約の非線形計画問題を解くJAVAのプログラムが出来上がった。
初めて、JAVAで本格的なプログラムを書いた。今までは、数値計算がらみは、Cで書くのが普通だったが、ついにオブジェクト指向言語に進化したわけだ。頭を結構、いや、強烈に切り替えなければならなかった。この年になると、こうした切り替えが億劫になる。これまでC++も含めて、なんども、オブジェクト指向に切り替えいようとしたのだが、クラスとかメソッドとか「なんでこんな面倒なものが必要なの!!」とすぐに放棄したわけだ。
しかし、やはり進化したものは進化したなりに優れている。JAVAでコーディングをすると、間違い、プログラムミスが劇的に減少した。あるいは、クラス(ないしはオブジェクト)というものの便利さを痛感した。これからは、Cを使わなくなる可能性が高い。なにしろ、JAVAはいい。OSに依存せずに動くというのもいい。たいがい、JAVAの実行環境は、しらずしらず、皆がインストールしている。
話は戻るが、準ニュートン法の私のプログラムは、変数の数の制約はなく、汎用性はあり、試験的によく知られた難しい非線形計画の問題もスラスラ解くようになった。そこで、もともと、このようなことをする動機である、温暖化対策統合シミュレーションをするという、目標に近づくために、簡単なラムゼーの動学的最適化モデルをこのプログラムで解かせることにした。
しかし、次のような制約がある。
(1)まだ制約条件(これが終わったら、制約条件付き準ニュートン法のプログラムを書くつもり)をつけられないので、完全に目的関数一本にしなければならない。
(2)Gradient(改善方向傾斜)の確定のために、微分係数が必要なのだが、数値微分が現状ではできないので、解析的に微分した関数を与えなければならない。
この二つの制約のために、ラムゼイモデルの期間数は最小限にとどめなければならない。かつ、消費が2期間のモデルにすると、終端期資本ストックを与えるために、最適消費が1期間に縮小してしまう。これでは、全く面白くもない。そこで、消費が3期間のモデルにせざるを得なくなった。だから、Ramsey3なのである。
モデルの数学的説明は、Ramsey3.pdfに説明されているのでご覧いただきたい。これ以上簡単化はできないというほどに、簡単化されてしまっているのがお分かりになるだろう。
JAVA用の実行プログラムramsey3.jar、設定ファイルramsey3.cfgなどがパックされたZIPファイル ramsey3.zipをダウンロードして、解凍していただきたい。JAVAの実行ファイル、ramsey3.jarと設定ファイルramsey3.cfgは、実行する同じフォルダになければならない。また、同梱のreadme.txtファイルに、OSごとの実行の仕方が書いてある。
Windowsのコマンドプロンプトで実行したイメージは、次のような感じである。ramsey3exec.gif
ramsey3.jarはWindows, MacOSX, Linuxのいずれでも動くことを確認している。ただし、私のLinuxでJAVAが古かったために、新しいものにアップグレードしなければならなかった。
設定ファイルを変更すると、結果が変わる。テキストエディタでramsey3.cfgで編集すればよい。λは1にしてはならないという制約はある。
また、プログラムの限界として、変数に制約条件がつかないので、設定値を変更すると、投資などが負の値になることがある。まあ、資本として使っていたものを消費に回すことはあり得るので、いいか、という感じですが。次期バージョンでは、不等式制約が使えるようにするのでお待ちください。
というわけで、もっとらしい答えを出したのだが、これが正しいかどうかが問題である。そこで、全く等価なモデルをエクセルのワークシート上に作成し、EXCELのソルバーで解いてみた。(Rmasey3.xlsにモデルが組み込まれている。解説付き)
見事に同じ解を出したので、どちらも正しいだろうという判定をした。
なお、GAMSでもプログラムを検証した。ramsey3.gms。同じ答えが出た。
(なお、これらのプログラムは極めて小さいので、GAMSの無料バージョンで解くことができる。そのサイトからダウンロードしてインストールすれば、無料バージョンのもの。有料は、単にライセンスファイルを購入するだけ。プログラム実態は有料も無料も同じなのである。大きなモデルはライセンスファイルなしには動かない。)
まあ、3期モデルなのでたいしたことはないのだが、重要なことは、生産関数や効用関数の各パラメータがどのような役割を果たすかが、実際それらのパラメータの値を変えてシミュレーションすることでわかってくることだ。とくに、λなどは、理論的には、Nordhausなども説明しているのだが、実際にやってみると実感できる。試みられたい。
上記のいろいろなファイルについての感想はメールで教えてください。
次は、制約条件付きの問題を解くことができる準ニュートン法をJAVAで作ることだが、数日以内にできるはずである。あと、数値微分をどう処理するかが、まだ展望を持っていない。まあ、なんとかなると思う。
