約3年ぶりに「全面的な再計算」を行うのにあたり、
3年前と同じでは芸がないので、新たな「計算戦略」を導入しました。
この戦略により、タイプ Lee の最長経路を求めてしまえば、タイプ Lee
以外のタイプに望みがないことを1回の計算で証明することが可能になりました。
このページで扱うのは、
整数計画法で最長片道きっぷの経路を求める場合の「新戦略」に関する話題です。
より具体的にいうと、タイプLの最長経路をあらかじめ求めておけば、
「タイプL以外の経路はタイプLの経路を上回れない」ということを、
1つの整数計画問題を解くだけで証明してしまえるというのが、
今回新たに考案した戦略です。
念のため、誤解のないように書いておきますが、
この戦略は問題の対象を「現在のJRの路線図のうち、
北海道・四国・九州を1本の枝にまとめて本州の路線図につなげたもの」、
すなわち「現在のJRの最長片道きっぷを求めるのに必要な路線図」に絞ったもので、
一般的な路線図すべてに適用できるものではありません。
2002年11月までの最長経路を見ると、2002年12月以降も、
前述の路線図ではタイプLが最長であることが予想されます。
それなら、他のタイプの扱いをできるだけ簡略化すれば、
全体として計算が楽に済むだろう、という考えです。
整数計画法で最長経路を求めるには、まず北海道、四国、
九州の3島について「本州と出入りできる経路のうち最長のもの」を求めておき、
この「出入り可能な最長経路」と同じ長さを持つ枝(行き止まりの路線)を計3本、
本州の路線図に付け加えてやるのでした。以後は、この「気分的にはJR全線」
の路線図のもとで整数計画問題をいくつか解いていきます。
(よく分からない人は [2-4]
により詳しい説明がありますので参考にしてください)。
この路線図上では、「北海道と九州の双方を通る経路」は必ずタイプLとなるので、
3島のうちたかだか1つしか通れないタイプPは圧倒的に不利です。
このことを利用すると、
「タイプPのうちで最長のもの」を苦労して求める必要はなく、
以下のような順序で「全タイプを通じた最長経路」を求めることができるのでした。
さて、ここで「タイプP」と書いた経路は、発駅の性質により「タイプ
Pe」と「タイプ Pn」に分類され、さらに「タイプ Pn」は、
「1駅延長したときの形態」により「タイプB」と「タイプ
B8」に分類されます。つまり、タイプPは Pe、B、B8
という3タイプに分類されます。
本編では、この3タイプを別々に扱い、
上記のような方法で3つのタイプをそれぞれ否定し、
タイプLが最長であると結論づけました。
さて、共同研究者の宮代くんは、新たな最長ルートを求めるにあたって、 「タイプL以外の3タイプをひとまとめにする」方法を思いつきました。
P形の経路を定式化する際に生まれた3つのタイプは、 それぞれ以下のような性質を持っています (参考としてタイプLについても書いておきます)。
タイプ Pe | タイプ B | タイプ B8 | タイプL (参考) |
|
---|---|---|---|---|
終端駅を何度通るか | 1回 | 0回 | 0回 | 2回 |
1つの駅に接続する枝を 同時に最大何本使うか |
3本 | 3本 | 4本 | 2本 |
ただし、終端駅以外では 「1本だけ使う」ことを許さない |
||||
「1つの駅に接続する枝を3本同時に使う」 ことを何度許すか |
1回 | 2回 | 0回 | 0回 |
「1つの駅に接続する枝を4本同時に使う」 ことを何度許すか |
0回 | 0回 | 1回 | 0回 |
このように、Pe、B、B8 の3タイプはそれぞれ性質が異なるので、
正直にこれを定式化すると各タイプで異なった制約式ができます。
だからこそ、本編ではこの3タイプを別物として扱い、
同じようなことを3回やったのです。
が、制約を緩くしてよいのなら、3タイプを同じ制約式で表現できます。
この部分が「新たな戦略」のキモです。
たとえば「終端駅を何度通るか」に関しては、
タイプ Pe が1回、その他が0回となっていますが、
これを「1回以下」と書けば3タイプに共通の制約式になります。
同様に、1つの駅に接続する枝を「4本以下」と書けば、
「同時使用本数」についても3タイプを1つの制約式で記述できることになります。
ちょっとややこしいのが「3本同時使用」「4本同時使用」ですが、 結論からいえば、「4本同時使用は1回だけ」という制約を 「3本同時使用は4回だけ」と書き換えることで、 3タイプをまとめることができました。
「3本同時使用が1回だけ」という制約をどう定式化するかについては本編([2-3])でふれましたが、
もう一度おさらいしておきます。
「ある駅に接続する枝を3本同時に使うときだけ1になる変数」として0-1変数
fi を用意し、a、b、c の3本の枝が出ている駅 p に対して
fp ≧ la + lb + lc − 2 | (A1) |
と定義します。ここで la は「a 番の枝を通る」ときに1、
「通らない」ときに0になる変数です。
d、e、f、g と4本の枝が出ている駅 q に対しては、
fq1 ≧ ld + le + lf − 2 | (A2) |
fq2 ≧ ld + le + lg − 2 | (A3) |
fq3 ≧ ld + lf + lg − 2 | (A4) |
fq4 ≧ le + lf + lg − 2 | (A5) |
のように「4本の枝から3本をとる組合せ」をすべて列挙してやればよく、最後に
Σi fi ≦ 1 | (A6) |
という制約式を入れれば、
「1つの駅から出る枝を3本同時に使用する」回数はたかだか1回にできるのでした。
(5分岐以上の駅に対しても、3本ずつ取り出して列挙すれば同様に扱えます。)
いっぽう、タイプ B8において必要な「4本同時使用は1回だけ」
という制約の定式化については本編でふれませんでしたが、
「3本同時使用」とまったく同じ手法を使いました。
タイプ B8では「4本同時使用」は1回あるものの「3本同時使用」はないので、
fi は定義せず、かわりに「4本同時使用のときだけ1になる変数」
ei を定義していたのです。
さて、1つの駅から出る枝を4本同時に使用する場合に、 前述の fi が定義してあったら、その値はどうなるでしょうか?
たとえば、d、e、f、g
という4本の枝が出ている駅 q があって、これら4本の枝をすべて使うとすると、
ld、le、lf、lg
はいずれも1なので、式 (A2)〜(A5) により fq1〜fq4
はいずれも1となります。もし、この駅以外に「3本以上同時使用」がなければ、
Σi fi の値は4となります。
このことを利用して、タイプ B8でも ei を定義する代わりに
fi を定義し、
Σi fi ≦ 4 | (A7) |
とすれば、ei を使って定式化するより制約が若干緩くなるものの、 「4本同時使用」を1回以下に抑えられます。
これでもうお分かりでしょう。 「4本同時使用が1回」という制約を「3本同時使用が4回」とみなせば、
となることから、 「3本同時使用は4回以下」という制約式で3タイプを総括できるのです。
長くなりましたが、タイプ Pe、タイプ B、タイプ B8の3タイプは、以下のような共通の制約(以下「PBB8 制約」と呼ぶ)を満たします。
PBB8 制約を満たす経路には、タイプ Pe、タイプ B、タイプ B8
の3タイプに属するすべての経路のほかに、「3タイプのどれにも属さない経路」、
つまり「ゴミ」も多く含まれています(図 A2)。
が、「PBB8 制約を満たすもののうちで最長のもの」、
すなわち「タイプ Pe とタイプ B とタイプ B8
とゴミの中で最長のもの」が「タイプLで最長のもの」
より短いことがいえれば、Pe、B、B8
の任意の経路は「タイプLの最長」より短いことになります。
そして実際、「PBB8 制約を満たすもののうちで最長のもの」を計算してみると、
その運賃計算キロは11339.1kmとなりました。
タイプLの最長は11614.9kmでしたから、タイプ Pe、タイプ B、タイプ B8
のいずれも「真の最長経路」にはなり得ない、
ということが一気に証明できました。
ところで、PBB8 制約を満たす最長の「経路」ってどんな形だろう? そんなことを考えたあなたのために、大サービスで地図を作ってみました(図 A3)。