TIM Labs

DSCN3911−600.JPG

Raspberry Pi3に、3.5インチ、つまりRaspberry Pi本体と同じサイズのディスプレイを付けてみた。

ちいさく、可愛く収まっている。

小さくても、4コアもあるので強力なはずだ。

左側は9x9のナンプレの自動生成が走っているところで、右側にはウェブでこのブログを見ているところだ。この程度は楽勝だ。

ところで、この3.5インチ液晶パネルには、こんな説明書がついてきた。

Raspberry Pi 3 を入手した

DSCN3824−600.JPG 電気通信大学の学内にあるオフィスの目と鼻の先に電子パーツ店がある。より正確にいえば、2mしか離れていない、つまり廊下の反対側に店がある。

そして、同じビルの1Fにあるセブン・イレブンでも電子部品や工具類を販売しているという極めて優れた場所である。

ということで、ついRaspberry Pi 3 を入手してしまった。

OSはネットから最新版の

Raspbian Stretch with desktop and recommended software

をダウンロードして入れた。とりあえず最新版のフル。

2018-11-13-raspbian-stretch-full.img

ZIPが 1978611497バイト(2GB)、展開したら 5297405952バイト(5.3GB)もあり、ダウンロードにちょっと時間がかかった。

それでも、今は簡単に落とせて、16GBのmicroSDカードにイメージを書き込んで、Raspberry Pi 3 に差し込んでUSBから電気を供給したら、簡単に立ち上がってしまった。意外と電気を食うので、ちゃんと3Aまで大丈夫なACアダプタも合わせて入手した。

ディスプレイは、とりあえず手元にあった27inchの4KのモニタにHDMIで繋いだ。
もちろん、ちゃんと表示されたのだが、Raspberry Piに4Kディスプレイではバランスが悪い。
ということで、もっと小さな、ラズパイの上につけられるような小さなのが良い。

オフィスの無線LANには難なく繋がり、ソフトのアップデイトも行えた。
キーボードはUSBでとりあえず繋いだが、マウスはbluetoothで繋いでみた。

本当に簡単になってしまった。
こんなに簡単になってしまって良いのだろうか?

ところで、これで何をしようか?

プログラムでは、以下のように # を使うことがある。

#include <iostream>

この # をシャープと読んでいる人をよく見かけるが、それって正しいのだろうか?

(1)♯  (2)#

の2つが存在し、一方がシャープで、もう一方は違う呼び方をする。
右肩上がりと、右に傾いているので、形が違い、文字コードも違うので違う文字である。

そもそも、シャープってどういう形だっただろうか。シャープというからには、音楽記号のはずである。sharp.JPG どう見ても、右肩が上がっている。
ということは、(1)がシャープであり、(2)は違うようだ。
そして、(2)の方が、プログラムで出てくる#に近い。

さらに、キーボードの刻印も(2)であるはずだ。

# は元々はナンバーサインと呼ばれていた。そして日本では、井桁という呼び方があった。
# はハッシュとも呼ばれる。 # を付けることでハッシュタグにするのは知られているはずだ。

そして、英語では、普通 hash と言われ、シャープと言われることは無いようだ。

# を正式にシャープと呼ぶなどという正式な決まりはどこにも存在しないはずだが、それが非常に広まってしまっている。
逆に、# をハッシュと言うと、日本国内では通じない可能性が高い。

まあ、困ったものだが、そういう風になっているので、気をつけよう。

謹賀新年

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

今年も、きっと人工知能、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にする方法を紹介します。

月別 アーカイブ