TIM Labs

新年明けましておめでとうございます。

今年も、きっと人工知能、AIで明け暮れることでしょう。

次のナンプレの問題は、もちろんAIを使って作ったものです。

ルールは不要かも知れませんが、一応書いておきます。

  1. 縦と横の各列9マスには、1~9の数字が1つずつ入ります。
  2. 3×3の太枠の中の9マスにも、1~9の数字が1つずつ入ります。
  3. したがって、縦、横、太枠内(ブロック)のいずれにも同じ数字は入りません。

    2019-eto.png

ルールさえ知っていれば解けるように、AIが作った問題です。

これがちょっと難しいと思った場合には、数字の入るマスの位置が同じでも、数字の値が違うプレゼント問題がこちらにあります。

遺伝といえばメンデルである。

あのエンドウ豆のシワの有無による研究により、遺伝学が始まったと言われている。

とくに、隔世遺伝というのがあり、子供には親の性質が現れないのに、孫には祖父母の性質が現れるという性質である。

さて、問題は、

一般的な遺伝的アルゴリズムの実装において、隔世遺伝は成り立っているのであろうか?

もう年末も近いので、問題の提起だけしておこうと思う。

正月休みに、ちょっと考えて見て欲しい。

では、良いお年を。

2人での巡回セールスマン問題は、以下のように考えると、できる。

TPS2-exp1.png

上は、両端がない循環しない紐状のルートの場合である。
これの両端の2つの街の間の距離も加え、全体でリング状になるとしたのが一般的な巡回セールスマン問題である。

ここでは、その下側のように、両端にベース(基地)を加えたものを考え、それらの間の距離も考えることにする。
すると、①がセールスマン1の巡回路になり、②がセールスマン②の巡回路になる。

これで、二人のセールスマンの巡回路が決まるので、その長さを求め、最小化すべきものを計算することで、いままでと同様に遺伝的アルゴリズムにより、二人巡回セールスマン問題が解ける。

これが分かれば、次のように考えると3人巡回セールスマン問題も解ける。

TPS2-exp2.png

3人の場合には、両端のない経路を考える時点で、既にベース(基地)が2つ入っている。

この場合、単にベースを2つ、その他の街を1つずつの並べ替えを考えれば良いだけである。

適当に並べたときに、ベースが連続する場合があり、その場合、全くなにもしない移動距離ゼロのセールスマンが発生する訳だが、その場合にはサラリーマン間の移動距離の差が大きくなるので、そのようなケースは自動的に排除されるので、何も問題ない。

このようにして、複数人で手分けをして回る場合の巡回セールスマン問題で、公平で合理的なルートを求めることができるのである。

この他にも、さまざまな条件の巡回セールスマン問題があるので、詳しくは各自で調べてみよう。

いや、自分で勝手にさまざまな条件をでっち上げて、考えてみるのも良いだろう。

一般的な巡回セールスマン問題は、一人のセールスマンが多数の街を巡回することになっているが、これでは過重労働になり、過労死するかも知れない。

ということで、セールスマンを増員してみよう。

2人のセールスマンは、いずれもセンター(基地、本社、本部、、、、何と呼んでも良いのだが)から出発して、全ての街をいずれかのセールスマンが立ち寄り、二人とも出発点のセンターに戻ってくるとする。

2人の負荷はできるだけ差が少ないことが望ましい。それで、各人の経路長の差を少なくしたい。かつ、各人の経路長も短くしたい。

それで、平均経路長+経路長の差 をできるだけ小さく(短く)することにしてみた。

すると、こんな結果が得られた。

100-2-2-2202-s.png    100-2-2-2120-s.png

左は赤と青の巡路が分かれているが、右は巡路が交叉している。

点の位置は同じになっているのだが、どちらが 平均経路長+経路長の差 が小さくなっている、つまり望ましいプランであろうか?

通常の巡回セールスマン問題は、スタート地点まで戻る、つまり一周する最短のループを求めるのであるが、それとはちょっと違う次図の場合について考えてみよう。

100-Line-3750.png  100-Line-3745.png

全ての点を結んでいるが、元の点には戻っていない。こういう場合の最短経路が欲しい場合もあろう。

開始点、終了点を任意としているので、実行の度に異なる。

求まるのは準最適解(それなりに良い解)であり、理論上の最適解ではないので、実行毎に異なってしまう。

さて、どうプログラムを変更すれば良いだろうか?

標準的な巡回セールスマン問題は、経路長が最短のものを見つけるのであるが、これを変えてみた。

最適化の対象になる関数を適応度関数(fitness function)とか、コスト関数、評価関数とか呼ぶわけだが、このfitness関数を距離ではない次のようなものに変えてみた。

AngleExp.JPG

各頂点で曲がることになるのだが、そのときの回転角度の2乗和を最小にすることにした。

プログラムで変更したのはたったそれだけ。

すると、こんなことになった。500-Angle.pngこれは前のより点数が増えて500点であり、もっとぐるぐる回っているように見える。

つまり、fitness関数は、なにか適当なのをでっちあげて、その関数の値を最適なもの(通常は最小か最大)を指定すると、後は延々と計算して、結果を表示してくれる。

ということで、巡回セールスマン問題だからといって、最短距離に凝り固まる必要はなく、ちょっと頭を柔軟にすると、色々なことを調べるのに使えるのだ。

巡回セールスマン問題は、実はもっともっと汎用性に富んでいるのだが、その話はまた次で。

個別のVM場合、ポータル上の専用タブからシャットダウン可能ですが、スケールセットでは利用できません。

今回は、開発・検証環境を想定して、営業時間外はスケールセットのインスタンス数を0にする方法を紹介します。

巡回セールス問題というと、与えられた点の全てを通る巡回路で一番距離が短いものということであり、下図のようなものを思い浮かべるであろう。

100-Normal.png

今回は、こういう普通のまっとうな巡回セールス問題ではなく、次図のような巡回セールス問題を考えてみよう。

100-Angle2.png

この結果も、巡回セールスマン問題を解くプログラムで巡回路を最適化したものである。
正確に言うと、ほんのちょっとだけプログラムを変更した。

与えられた全ての町(点)を一度だけ通過しているので、巡回しているが、どうみても、距離が最短ではない。最短距離なら、巡回路が重なる場合には、さらに短い巡回路を簡単に作れる。

何だが、ぐるぐる回る巡回路になっているようだが、何を最適化したのだろうか?

殆どの巡回セールスマン問題を取り扱っている本では、巡回セールスマン問題を深く説明することがあっても、巡回セールスマン問題を多様に拡張する、あるいは抽象化することで、非常に多様な問題を解く基本的なアルゴリズムとして使えることの説明がほとんど皆無であり、とても残念である。

...ということで、ぐるぐる回る巡回路について、何を最適化しようとしたか、考えてみよう。

説明は、次回に行う。

(つづく)

トランザクション処理性能は、システムを構築する上で重要な指標の1つです。

一般的なデータベースと同様に、トランザクション毎秒(Transactions Per Second, tps)がブロックチェーンの処理性能の指標の計測に使われています。

今回も前回と同様にEthereum PoA, Hyperledeger, Cordaの3つの処理性能に関する情報を集めてみました。

AZUREソリューション部の土田です。

Azure Blockchain workbenchでは、現在Ethereum PoAが利用可能で、今後Hyperledger Fabric, Cordaのサポートが予定されています。

検討用資料として、基本的な情報をまとめておきます。

この情報は2018年10月現在の情報です。

最近のコメント

月別 アーカイブ