CO2規制のモデル

EPPAモデルと同じタイプのモデルをGAMSで書いていたが、生産関数を

  • 農業部門
  • 一次エネルギー部門
  • 電力部門
  • 石油製品部門
  • その他の部門

の5つのタイプに分けるところまではできた。

今回はMPSGEを利用せずに普通のMCPの形式で書いた。MPSGEを利用しない場合は拡張しやすいという利点はあるが、プログラムが非常に煩雑になるという欠点もある。実際、今回もプログラムの間違っている部分がなかなか見つからなくてデバッグにものすごく時間がかかってしまった。

普通、自分がGAMSでCGEのプログラムを書くときは

  • プログラムを書く
  • 様々なチェックをおこない間違いがないか確認
  • 問題なければ、さらにプログラムを追加

という手順を繰り返す。2番目のチェックというのは例えば、

  • Benchmark replicationチェック
  • Walras' Lawのチェック
  • 外生変数のproportionalな変化によるチェック

というようなもの。

Benchmark replicationとは、Benchmark dataのもとで均衡条件が満たされるかどうかのチェック。均衡条件が満たされない(かつ、データに問題がない)なら、それはモデルに誤りが含まれるということを意味する。

Walras's Lawのチェックも同じ。通常のCGEで利用するモデルはWalras's Lawが満たされなければいけないモデルであるので、Walras' Lawが満たされなければ、モデルが間違っているということになる。Walras' Lawとは「n本の市場均衡条件のうち、(n-1)本が満たされているのなら、残りの1本も満たされる」という性質。チェックするには、実際一本をはずしてモデルを解いてみて、はずした一本も満たされているか調べればよい。

3番目は「収穫一定の技術(CRTS)」の技術を前提としたモデルで利用できるチェック。全ての生産関数・効用関数が一次同次であるようなモデルでは、外生変数(要素賦存量等)を○%変化させた場合、数量を表す内生変数は同じように○%変化する一方、価格変数は不変となる。実際モデルを解いてみたときこのような結果にならなければ、やはりモデルが間違っているということ。ただし、このチェックは規模の経済が存在するようなモデルでは使えない。

上の3つが簡単にできるモデルのチェック方法。ただし、上の3つのチェックを通ったからと言って間違いがないというわけではもちろんないので注意。

それに間違いがあるとわかったとしても、間違っている場所を見つけるための簡単な方法があるわけではないので、結局プログラムを少しずつチェックしていくしかない。短いプログラムならそれほど大変ではないが、今書いているプログラムではモデルの記述部分だけでも1000行以上あるので、たった一か所の間違いを見つけるのに数時間もかかる場合がある。つかれた...