ソースプログラムを覗いてみよう!!

【書籍等の購入はこちら⇒】


【Python 3.6ソースプログラム】


白井豊著 Kindle版「PYTHON 3.6 による フラクタルの描き方」シリーズ ソースプログラム例

白井豊著 Kindle版「PYTHON 3.6 による 力学シミュレーション」シリーズ ソースプログラム例

【VBA/Excel式定義】   【VB.net】   【C#.net】   【Android Java】   【C言語】   【Prolog】 【Python】

C言語による【言語処理学習用データ型自由なミニ言語(Type Free Mini Language)】

以下はPython 3.6によるソースプログラムです。
他のバージョンの方は適宜読み替える必要があります。
なお,Pythonの動作環境がない方はメモ帳などで参照して下さい。

ソーステキストのコードはUTF-8です。
Shift_JISで表示すると文字化けします。
表示上で右ボタンをクリックして「エンコード(E)]をクリックして
「unicode(UTF-8)」を選んでください。

あるいはダウンロードして
メモ帳等でASCIIコードを指定して保存してもかまいません。
なお,Shift_JISやeuc_jp等でPythonを使う場合,
先頭でコード指定をします。

# -*- coding: shift_jis -*-

('shift_jis'を使っているコードに合わせて'euc_jp', 'UTF-8'等に変えます)


【目次】以下の目次をクリックすると該当記事にジャンプします。
  1. 2次元セルオートマトン
  2. ボールの動きのシミュレーション
  3. Bunceゲーム
  4. コッホ曲線
  5. 立ち枯れ木立
  6. C曲線
  7. ドラゴン曲線
  8. ヒルベルト曲線
  9. シェルピンスキ曲線
  10. 反復関数系
  11. マンデルブロ集合(Mandelbrot set)
  12. 充填ジュリア集合(Filled Julia Set)
  13. 畑政義写像
  14. カントールの塵(Cantor Dust)
  15. シェルピンスキのカーペット(Sierpinski Carpet)
  16. シェルピンスキのギャスケット(Sierpinski Gasket)
  17. メンガーのスポンジ(Menger Sponge)
  18. グモウスキーとミラの写像(Gumowski-Mira Map)
  19. マウスイベント(番外編)
  20. キーボード・イベント(番外編)
  21. BMPファイルのカラーマップ表示
  22. BPILを使わないBMPファイルの表示とGetPixel/SetPixel
  23. BMPファイルの出力と新規ビットマップの生成
  24. 色調(Color Tone)の変更
  25. 画像フィルタリング処理
  26. メディアン・フィルタ(Median Filter)
  27. ヒストグラム平坦化(Histogram Equalization)
  28. ガンマ補正(Gamma Correction)
  29. モザイク処理(Mosaic Processing)
  30. アナログ時計の表示
  31. カレンダー表示
  32. 旧暦および六曜計算
  33. 祭日や振替休日を求める
  34. オセロ・ゲーム
  35. マインスィーパ
  36. テトリス
  37. 3D用表示用インポートファイル
  38. 弦の振動
  39. 振り子の運動
  40. ニューラルネットワーク誤差逆伝播法
  41. 球をゴムひもで引っ張る動き
  42. 自作メッセージボックス(番外編)
  43. 分子運動のシミュレーション
  44. ランダム地形生成
  45. 簡易テキスト・エディタ
  46. 子プロセスの標準出力を受け取る(番外編)
  47. 子プロセスに標準入力を送る(番外編)
  48. PythonでMS-DOSコマンドの実行(番外編)
  49. Pythonでのマルチスレッド例(番外編)
  50. ハノイの塔
  51. 平面充填問題
  52. コッホ雪片(Koch Snowflake)
  53. ブラウン運動(Brownian Motion)
  54. 煙のシミュレーション(Simulation of Smoke)
  55. 二次元花火のシミュレーション(2D Fire Works Simulation)
  56. 炎のシミュレーションやってみた
  57. N巴の食物連鎖(Food Chain of N Cycles)
  58. ロジスティック写像(Logistic map)
  59. ジャパニーズ・アトラクタ(JapaneseAttractor)
  60. ローレンツ・モデル(Lorentz Model)
  61. エノン写像(Henon Map)
  62. リアプノフ・フラクタル(Lyapunov fractal)
  63. 燃える船フラクタル(Burning Ship fractal)
  64. シェルピンスキのピラミッド
  65. 相似縮小変換によるフラクタル
  66. ランダム・コッホ曲線を利用した島形状の生成
  67. 二次元波動シミュレーション
  68. モルフォロジー変換(グレースケール版)
  69. Kindle版「Python 3.6 による暦の作成」用ダウンロード
  70. Kindle版「Pythonによる数値解析入門」用ダウンロード
  71. おもちゃみたいなプロダクション・システム(YS Tiny Rule Base)
  72. おもちゃみたいな診断システム(YS Tiny Diagnosis)
  73. ファジー演算学習用
  74. ニューラル・ネットワーク
  75. 分類問題
  76. Tiny Tierra
  77. 蟻コロニー問題のアニメーション
  78. 遺伝的アルゴリズム(GA)の簡単な例
  79. 遺伝的プログラミング(GP)の簡単な例
  80. 粒子群最適化の簡単な例
  81. 蟻コロニー最適化の簡単な例(巡回セールス問題への適用)
  82. 辺近傍法の簡単な例(巡回セールス問題への適用)
  83. 昔懐かしのライフ・ゲーム
  84. 一次元セル・オートマトン
  85. 鳥もどき(Boids: bird oid)
  86. カッコウ探索(CS: Cuckoo Search)
  87. 魔方陣(Magic Square)
  88. ナンプレパズル(Number Place Puzzle)

  1. 2次元セルオートマトン
  2. 変幻自在に変化する画像をお楽しみ下さい。

    2次元セルオートマトンの絵(その1) 2次元セルオートマトンの絵(その2)

  3. ボールの動きのシミュレーション
  4. 反撥係数や速度に比例する粘性抵抗等を変化させて見ましょう。

  5. Bounceゲーム
  6. ボールの動きをより単純化して,
    壁で跳ね返るボールをラケットで打ち返すゲームにしました。

  7. コッホ曲線
  8. タートル・グラフィックスでコッホ曲線を描くプログラムです。

    コッホ曲線の絵><BR><BR>
	文字通り,亀(turtle)ですので,スピードを速くしてもやはりのろい。<BR>
	そこでtkinterでCanvasを使って高速に描画できるようにしました。<BR>
	相対的な描画をRelativeDrawクラスとして宣言し,<BR>
	他の描画処理でも使えるようにしてあります。<BR><BR>
	<A href=Canvasを使ったコッホ曲線描画

  9. 立ち枯れ木立
  10. タートル・グラフィックスで立ち枯れ木立を描くプログラムです。

    立ち枯れ木立の絵 ><BR><BR>
	コッホ曲線と同様,tkinterを使った高速描画例が以下の例です。<BR>
	なお,RelativeDrawクラスはコッホ曲線と同じですが,<BR>
	差分プログラミングの良い例題となっています。<BR><BR>
	<A href=Canvasを使った立ち枯れ木立

  11. C曲線
  12. C曲線を描くプログラムです。

    C曲線の絵 ><BR><BR>
	コッホ曲線と同様,tkinterを使った高速描画例が以下の例です。<BR>
	なお,RelativeDrawクラスはコッホ曲線と同じですが,<BR>
	複数階層のクラス継承(RelativeDraw→RelativeCurve→C_Curve)の<BR>
	良い例題となっています。<BR><BR>
	<A href=Canvasを使ったC曲線

  13. ドラゴン曲線
  14. ドラゴン曲線を描くプログラムです。

    ドラゴン曲線の絵

    コッホ曲線と同様,tkinterを使った高速描画例が以下の例です。
    C曲線と同様,複数階層のクラス継承を行っています。
    Canvasを使ったドラゴン曲線

  15. ヒルベルト曲線
  16. ヒルベルト曲線を描くプログラムです。

    ヒルベルト曲線の絵

    コッホ曲線と同様,tkinterを使った高速描画例が以下の例です。
    Canvasを使ったヒルベルト曲線

  17. シェルピンスキ曲線
  18. シェルピンスキ曲線を描くプログラムです。

    シェルピンスキ曲線の絵

    コッホ曲線と同様,tkinterを使った高速描画例が以下の例です。
    Canvasを使ったシェルピンスキ曲線

  19. 反復関数系
  20. 反復関数系で羊歯の葉を描く例です。
    なお,Python 3.6にPILが対応していないので,
    1ピクセルの大きさの四角形で点を代表させています。
    PILが対応したらここは変更すべきでしょうね。

    羊歯の葉の絵

    なお,拙著Kindle版「C言語によるフラクタルの描き方 第4巻」で
    様々な反復関数系を紹介しています。
    ぜひご一読の上,Python上でも表示して楽しまれることを推奨します。

    以下は,タートル・グラフィックスを使った例です。
    表示速度が遅いので,画面タイトルに途中経過を表示しています。

    タートル・グラフィックス版・反復関数系

  21. マンデルブロ集合(Mandelbrot set)
  22. マンデルブロ集合を描く例です。
    なお,反復関数形と同様,
    1ピクセルの大きさの四角形で点を代表させています。

    マンデルブロ集合の絵

    表示速度は遅いですが,タートル・グラフィックスで描く例を以下に示します。

    タートル・グラフィックス版・マンデルブロー集合

    【充填ジュリア集合との合体と表示操作の追加】

    以下は、次項の充填ジュリア集合と合体させ,以下のような操作を可能にしたバージョンです。

    1. 左ドラッギングで表示位置の移動
    2. 左ダブルクリックで拡大表示
    3. 右ドラッギングで縮小表示
    4. 右ダブルクリックで配色変更

    充填ジュリア集合との合体と表示操作の追加

    以下は表示例です。

    充填ジュリア集合との合体版の画面例

  23. 充填ジュリア集合(Filled Julia Set)
  24. 充填ジュリア集合を描く例です。
    なお,反復関数形と同様,
    1ピクセルの大きさの四角形で点を代表させています。

    充填ジュリア集合の絵

    表示速度は遅いですが,タートル・グラフィックスで描く例を以下に示します。

    タートル・グラフィックス版・充填ジュリア集合

  25. 畑政義写像
  26. 畑政義写像を描く例です。
    なお,反復関数形と同様,
    1ピクセルの大きさの四角形で点を代表させています。

    畑政義写像の絵

    表示速度は遅いですが,タートル・グラフィックスで描く例を以下に示します。

    タートル・グラフィックス版・畑政義写像

    なお,畑政義写像ではパラメータによって様々な画像を生成できます。

    畑政義写像画像集

  27. カントールの塵(Cantor Dust)
  28. カントールの塵を描く例です。

    カンロールの塵の絵

  29. シェルピンスキのカーペット(Sierpinski Carpet)
  30. シェルピンスキのカーペットを描く例です。

    シェルピンスキのカーペットの絵

  31. シェルピンスキのギャスケット(Sierpinski Gasket)
  32. シェルピンスキのギャスケットを描く例です。

    シェルピンスキのギャスケットの絵

  33. メンガーのスポンジ(Menger Sponge)
  34. メンガーのスポンジを描く例です。若干,時間がかかります。

    メンガーのスポンジの絵

  35. グモウスキーとミラの写像(Gumowski-Mira Map)
  36. グモウスキーとミラの写像を描く例です。
    例題プログラムではμの値を-1〜1の間で変化させます。

    めまぐるしく変化する画像をお楽しみ下さい。

    グモウスキーとミラの写像の絵

  37. マウス・イベント(番外編)
  38. 単に線を描いたり,消したりするだけのプログラムですが,
    マウス・イベント操作の良い例題になっています。

  39. キーボード・イベント(番外編)
  40. キーボードのイベント処理と、入力データをリストに保管するだけのプログラムです。
    キーボード・イベント操作の良い例題になっています。

    さらに,プログラムを完了させる際の問合せ処理のために
    インポートするライブラリ名や関数名がPython 2.7と非常に異なっていますので,
    プログラム中にその対応を示しています。

    【実行結果例】

    Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>>
    RESTART: C:\Users\Shirai\AppData\Local\Programs\Python\Python36-32\project\keyboadEvent.py
    []
    Key Pressed char= '' key sombol= Shift_L
    ['K']
    Key Pressed char= 'K' key sombol= K
    ['K', 'e']
    Key Pressed char= 'e' key sombol= e
    ['K', 'e', 'y']
    Key Pressed char= 'y' key sombol= y
    ['K', 'e', 'y', 'b']
    Key Pressed char= 'b' key sombol= b
    ['K', 'e', 'y', 'b', 'o']
    Key Pressed char= 'o' key sombol= o
    ['K', 'e', 'y', 'b', 'o', 'a']
    Key Pressed char= 'a' key sombol= a
    ['K', 'e', 'y', 'b', 'o', 'a', 'r']
    Key Pressed char= 'r' key sombol= r
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd']
    Key Pressed char= 'd' key sombol= d
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '\u306e' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処']
    Key Pressed char= '\u51e6' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理']
    Key Pressed char= '\u7406' key sombol= ??
    Return Pressed key sombol= Return
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x']
    Key Pressed char= '\uff58' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t']
    Key Pressed char= '\t' key sombol= Tab
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t']
    Key Pressed char= '' key sombol= ??
    ['K', 'e', 'y', 'b', 'o', 'a', 'r', 'd', 'の', '処', '理', 'x', '\t', 'z']
    Key Pressed char= '\uff5a' key sombol= ??

  41. BMPファイルのカラーマップ表示
  42. フルカラー(24ビット)以外のBMPではヘッダの直後にカラーマップが格納されます。
    これをすべて表示します。

    BMPのヘッダ構成を理解するための例題でもあります。

    なお,この種のプログラムではPython 2.7で動いていたものが、
    ことごとく動かなくなりました。
    Python 3.6に移行するためのケーススタディになるかもしれません。

    256色BMPのカラーマップ 256色BMPのヘッダ内容例
    256色BMPのカラーマップ 256色BMPのヘッダ内容例

  43. PILを使わないBMPファイルの表示とGetPixel/SetPixel
  44. Python 3.6用のPILはなかなかサポートされそうにありません。
    2.7から3への移行で大幅な改変がありましたので,
    ツール側がついていくのが大変なのでしょう。
    しかし,GetPixelとSetPixelなしに画像いじりはできません。
    そこで,Canvas上に擬似的なPixel(1×1の正方形)を置いて
    入力したBMPファイルのビットデータの色に変えることで
    仮想的なイメージデータを表現してみました。

    以下は,BMPファイルを読み込み、
    (100,100)-(199,199)のピクセルを(0,0)-(99,99)に移動した例です。

    BMPとピクセル移動例

  45. BMPファイルの出力と新規ビットマップの生成
  46. 「22.PILを使わないBMPファイルの表示とGetPixel/SetPixel」に、
    BMPファイルの出力と新規に画像を生成するための機能(24ビットのみ)を追加しました。
    本プログラムでは,カラーをコードで指定する方法を前提としていますが、
    どうしてもカラー名を使いたい人のための関数も用意してあります。

    なお,256色カラー(8bits)や16色カラー(4bits)での出力が遅いですが,
    類似色判定の処理に時間がかかっています。
    アルゴリズムの改善が必要でしょう。

  47. 色調(Color Tone)の変更
  48. 色調を変更するプログラム例です。
    なお、以下のモジュール(23で示したプログラムを整理したもの)をインポートしています。
    また、カラーテーブルの色を明度別に並べることで類似色判定の高速化を行っています。

    画像キャンバス・モジュール

    以下は,上記モジュールを用いた入出力テストプログラムです。

    画像入出力テスト

    元画像 プログラムの実行例
    元画像(すずめの画像) 色調を変化させた画像

  49. 画像フィルタリング処理
  50. フィルタ行列を使った画像処理のプログラム例です。
    なお、以下のモジュールをインポートしています。

    画像キャンバス・モジュール

    拡大画像

    平滑化 加重平均
    平滑化 加重平均
    鮮明化 エッジ抽出
    鮮明化 エッジ抽出
    エンボス効果
    エンボス効果

  51. メディアン・フィルタ(Median Filter)
  52. メディアン・フィルタによる画像処理のプログラム例です。
    いわば「ゴミ取りフィルタ」ですので,あらかじめ元画像に小さな点を混在させています。
    若干のぼかしは入りますが,ゴミはきれいに取り除かれています。

    なお、以下のモジュールをインポートしています。

    画像キャンバス・モジュール

    メディアン・フィルタ処理を行った画像

    ちなみに、以下は平滑化処理を行った結果です。
    小さなゴミは、ぼかされてはいますが残ってしまいます。

    平滑化処理を行った画像

  53. ヒストグラム平坦化(Histogram Equalization)
  54. ヒストグラムを平坦化する画像処理プログラム例です。
    ヒストグラムが明るい側に集まっていて不鮮明になっている元画像が、
    平坦化させることで鮮明になりました。

    なお、以下のモジュールをインポートしています。

    画像キャンバス・モジュール

    ヒストグラムの平坦化を行った画像

  55. ガンマ補正(Gamma Correction)
  56. ガンマ補正処理を行うプログラム例です。
    なお、以下のモジュールをインポートしています。

    画像キャンバス・モジュール

    γ=0.54 γ=1.55
    ガンマ値0.54のときの画像 ガンマ値1.55のときの画像

  57. モザイク処理(Mosaic Processing)
  58. モザイク処理を行うプログラム例です。
    マウス・イベントの例題にもなっています。
    なお、以下のモジュールをインポートしています。

    画像キャンバス・モジュール

    モザイク処理の画像

  59. アナログ時計の表示
  60. アナログ時計を表示するプログラム例です。
    ウィンドウサイズが変更されたときのイベント処理の例題にもなっています。

    アナログ時計の画像

  61. カレンダー表示
  62. カレンダーを表示するプログラム例です。
    ただし,Rythonにおけるテキストボックスからのデータ取り出しは普通の言語とかなりの隔たりがあります。

    カレンダー表示

    【旧暦・六曜表示カレンダー】 以下は,次項「33.旧暦および六曜計算」にカレンダー表の文字生成を組み込み
    カレンダーに旧暦の日付,および六曜を表示するようにしたバージョンです。

    旧暦・六曜表示版

    以下のモジュールをインポートしていますので,併せてダウンロードして下さい。

    旧暦・六曜計算・表示

    以下は、実行例です。

    旧暦・六曜表示カレンダー

    【元号表示/祭日・振替休日表示カレンダー】
    [2017/09/01 元号一覧の元号をクリックすると、
    その元号の最初の日のカレンダーを表示する機能を追加しました]

    小生と同年代の人たちから「元号が表示されていないと暦らしくない」との
    意見がありましたので、元号を表示できるようにしました。
    明治以降の元号表示だけでは面白くないので、過去の元号も表示できるようにしました。

    元号表示/祭日・振替休日表示

    以下のモジュールをインポートしていますので,併せてダウンロードして下さい。

    旧暦・六曜計算・表示
    祭日や振替休日を求める

    なお,2019年の5月1日の元号改正については,
    2019年の4月1日に発表されましたので,元号「令和」を反映しました,
    以下、1573年以前のカレンダーを表示する際の注意事項です。

    注意事項

    過去の元号の表示 2017/08
    過去の元号一覧 2017年8月のカレンダー
    1989/01 1868/01
    1989年1月のカレンダー 1861年1月のカレンダー
    1573/09 1700/04
    1573年9月のカレンダー 1700年4月のカレンダー

  63. 旧暦および六曜計算
  64. 旧暦及び六曜を求めるプログラム例です。

    以下はその実行例です。

    旧暦・六曜計算の実行例

  65. 祭日や振替休日を求める
  66. 祭日や振替休日を求めるプログラム例です。以下は,その実行例です。
    時代と共に祭日が変わっていることが分かります。特に戦前は、同じ日なのに祭日名がまったく違いますね。

    関数実行例(2008年) 1990年の祭日と振替休日 1970年の祭日
    (振替休日なし)
    関数実行と2008年の祭日と振替休日 1990年の祭日と振替休日 1970年の祭日
    1950年の祭日
    (振替休日なし)
    1900年の祭日
    (振替休日なし)
    1950年の祭日 1900年の祭日

  67. オセロ・ゲーム
  68. オセロ・ゲームのプログラム例です。

    以下はその実行例です。

    オセロ・ゲーム対戦例(引き分け)

  69. マインスィーパ
  70. マインスィーパ・ゲームのプログラム例です。

    以下はその実行例です。

    マインスィーパ実行例

  71. テトリス
  72. テトリス・ゲームのプログラム例です。

    以下はその実行例です。

    テトリス実行例

  73. 3D用表示用インポートファイル
  74. 3D表示用のインポートファイルです。以下は、インポートファイルを用いたプログラム例です。

    ワイヤフレーム 法線ベクター(その1) 法線ベクター(その2)
    ワイヤフレーム画像 法線ベクター(その1)画像 法線ベクター(その2)画像
    塗りつぶし法 Zバッファー法
    塗りつぶし法画像 Zバッファ法画像

    【シェーディング手法の違い】

    なお、基本的には Z バッファ法を用い、反射光、環境光、照明光の 3 種類を考慮したものです。
    照明光だけの Z バッファ法の画像とも比較して下さい。

    フラット・シェーディング
    (flat shading)
    グロー・シェーディング
    (gouraud shading)
    フォン・シェーディング
    (phong shading)
    フラット・シェーディング グロー・シェーディング フォン・シェーディング


    【反射、屈折の扱い】

    なお、3D用表示用インポートファイル以外に、以下のファイルをインポートしています。

    3Dモデル用インポートファイル

    【注意】
    色混合では、本来は光周波数ごとのエネルギーを求め、周波数別エネルギーを加算して、
    その対数値からRGBを求めるのが本来の方法ですが、本プログラムでは各RGB値の比率の加算(反射等)、
    減算(透過)という簡便な方法を使っています。
    影のみ考慮 反射と影を考慮 屈折率を考慮
    影のみ考慮した画像 反射と影を考慮した画像 屈折率を考慮した画像

  75. 弦の振動
  76. 弦の振動のシミュレーションです。

    ただし,刻み幅は微小と考えていますので,x方向移動量は 0 とみなされています。
    初期値が三角形の弦形状でも、徐々にsin曲線に近づいていくのを観察下さい。

    なお、プログラムでは弦形状の初期値を選択できるようになっています。
    以下は弦形状の初期値が三角形の場合の実行例です。

    弦の振動の動画

  77. 振り子の運動
  78. 振り子の運動のシミュレーションです。

    ただし,初期角度は微小という前提を入れていませんので、
    最初の角度が大きくてもかまいません。

    簡単なプログラムですので、入門者に最適な例題だと思います。
    以下は、途中までの実行例の繰返しです。

    振り子の運動の動画

  79. ニューラルネットワーク誤差逆伝播法
  80. ニューラルネットワーク誤差逆伝播法のプログラム例です。

    徐々に誤差が少なくなっていく過程を観察しましょう。
    以下は、最終結果の例です。

    誤差逆伝播法の最終結果

  81. 球をゴムひもで引っ張る動き
  82. 球をゴムひもで引っ張る動きをシミュレーションします。

    マウスボタンをクリックしないでマウスを動かすイベントの良い例になっています。
    画面上でマウスを動かすだけでもちょっと楽しいかも・・・。

    球をマウスで引っ張る様子

  83. 自作メッセージボックス(番外編)
  84. messageboxがあるのに、何を今更と言われそうですが、
    サブウィンドウの例として自作のメッセージボックスを作ってみました。

    呼び出し側 メッセージボックス
    メイン側 表示されるメッセージボックス



  85. 分子運動のシミュレーション
  86. 分子運動のシミュレーションを行います。
    分子間力は、レナード・ジョーンズ・ポテンシャルで計算します。
    なお、以下のGIFファイルの動きは遅いようですが、
    プログラム上は、各分子はもっと速く動きます。

    分子間力のグラフ 実行のGIFファイル
    メイン側 分子の動きのシミュレーション



  87. ランダム地形生成
  88. ランダムな地形を生成するプログラムです。
    パラメータを変更して楽しみましょう。
    また地形データをテキストデータとして入出力できます。
    ですから、生成データを保存して,再度読み込んで表示できます。
    他のプログラムでCSVファイルを作成して読み込むこともできます。

    ランダム地形の表示


  89. 簡易テキスト・エディタ
  90. 簡易なテキスト・エディタのPythonによる実装例です。

    テキストエディタの表示例

  91. 子プロセスの標準出力を受け取る(番外編)
  92. 以下は、表題のプログラムを起動し、
    その標準出力を受け取るプログラム例です。
    子プロセスは、1秒ごとに標準出力に番号を出力し
    5回で終わる非常に簡単なプログラム例です。

    同期方式親プログラム 非同期方式親プログラム
    同期方式実行結果 非同期方式実行結果


  93. 子プロセスに標準入力を送る(番外編)
  94. 以下は、表題のプログラムを起動し、
    起動したプログラムに標準入力のデータを送ります。

    さらに、その標準出力を受け取って表示します。

    子プロセスは、標準入力から数字を受け取って
    英語表記を標準出力に出力する単純なプログラムです。

    標準入力を送る親プロセスのプログラム

    【出力例】

    標準入力を送って表示する実行結果例


  95. PythonでMS-DOSコマンドの実行(番外編)
  96. Pythonの標準入力をMS-DOSコマンドとしてみなして、
    外部コマンドを実行して、その標準出力を表示します。

    外部コマンドの実行と標準出力を受け取る例題です。

    2017/09/24 UTF-8のファイルをtypeコマンドで表示しても
    変換エラーで無視される現象がなくなりました。

    【出力例】

    MSDOSコマンドインタプリタのシミュレーション

    なお、プログラム起動だけなら以下のような簡単なプログラムで可能です。
    (インターネット・エクスプローラを起動する例です)

    import subprocess, sys
    try:
        result = subprocess.run("C:\\Program Files\\Internet Explorer\\iexplore.exe",shell=True, check=True)
    except subprocess.CalledProcessError: print('外部プログラムの実行に失敗しました', file=sys.stderr)


  97. Pythonでのマルチスレッド例(番外編)
  98. とかくマルチスレッドで同期制御を無視したプログラミング例が多いので、
    セマフォーによる表示衝突制御、サブプロセスの終了検知の例を示します。

    なお、論理的な手法については

    拙著Kindle版「C言語によるマルチスレッドプログラミング」

    を参照いただければ幸いです。

    【出力例】

    マルチスレッド実行例

  99. ハノイの塔
  100. ハノイの塔の問題は、再帰的プログラミングの代表例です。
    簡単な問題ですので、表示にこだわりました。

    【出力例】

    ハノイの塔実行例

  101. 平面充填問題
  102. 平面充填問題のPython版です。
    ハンカチのデザインにでも使えそうでしょうか?

    【出力例】

    平面充填の画像例

  103. コッホ雪片(Koch Snowflake)
  104. コッホ雪片を描くだけなら面白くないので、ターン角度を −60 度から +60度まで変化させて色分けしました。
    当然のことですが −60 度のとき各辺のコッホ曲線が中央で交わります。

    【出力例】

    なお、例2では 60度と−60度は線幅 1、以外は、振りこぼしを少なくするため線幅 3 で描画しています。
    例3では 60度のみ線幅 1、以外は線幅 3 で描画しています。例4では−60度を最後に白で描画しています。
    描画方法の変更でいろいろ楽しめそうです。皆さんは、どれが好みでしょうか?

    画像例1
    (カラフルな画像)
    画像例2
    (青基調)
    画像例3
    (画像例2の白青逆転)
    画像例4
    (色相変更と−60度と60度再描画)
    カラフルな画像 青色基調の画像 例2の白青逆転 シアン系の画像


  105. ブラウン運動(Brownian Motion)
  106. ブラウン運動のシミュレーションプログラムです。
    ほこりの壁との反撥係数を 0 としています。
    反撥係数を設定すると、隅にほこりが集まる確率が少なくなります。

    【出力例】

    ほこりが隅に集まっているシミュレーション結果

  107. 煙のシミュレーション(Simulation of Smoke)
  108. 煙の粒子の運動のシミュレーションプログラムです。考え方については、

    〜ExcelとVBAで絵を動かすテクニック〜「動く力学シミュレーション」(白井豊 著)(ISBN978-4-904551-04-2)

    を参照頂ければ幸いです。

    【出力例】

    煙が舞い上がっている様子のシミュレーション動画

  109. 二次元花火のシミュレーション(2D Fire Works Simulation)
  110. 二次元での花火のシミュレーションです。

    【出力例】

    花火のシミュレーション動画

  111. 炎のシミュレーションやってみた
  112. 温度による膨張を横方向への変動の大きさと解釈しています。
    ただし、この方法では、ライターの炎のように点火場所が高温の場合、急激に周辺温度に近づきますので
    横方向への変動量を少なくする等の調整を行う必要があります。

    2017/09/22:表示部分を大幅改造しました。かなり炎らしくなったと思います。

    2017/09/23:表示範囲を狭めたり、省略可能な計算を判定することで高速化しました。
    ただし、プログラムの実行でアニメーション表示ができるまでには至っていません。
    アニメーション表示するには、C、C++等で実装すべきでしょう。

    【出力例】

    粒子数 1,000のとき
    (ばらつきが大きい)
    粒子数 2,000 のとき
    (ばらつきが少なくなった)
    粒子数 3,000 のとき
    (かなり安定するが実行時間が遅い)
    粒子数1,000のときの画像 粒子数2,000のときの画像 粒子数3,000のときの画像


    以下は、粒子数 2,000 のとき画面キャプチャして
    1コマごとの表示時間間隔を短くして動画化したものです。

    粒子数2,000のときの動画

  113. N巴の食物連鎖(Food Chain of N Cycles)
  114. C言語に比べ非常に遅いので、100×100のメッシュにしました。
    2017/09/23 表示色が変わる部分だけ色を変えるようにしたらかなりスムーズになりました。

    なお N = 5 〜 12 程度が適当です。N = 3, 4 のときはなかなか群落ができません。
    N = 16 のときは、周りに餌がなくてほとんどの生物が増殖しないこともあります。
    【出力例】

    N =  8 のときの画像 N =  9 のときの画像 N = 11 のときの画像

  115. ロジスティック写像(Logistic map)
  116. Pythonでのロジスティック写像を描画する例題です。
    マウス左クリックで全体の描画、2倍、4倍、6倍の切り替えを行います。

    【出力例】

    全体画像 2倍にした画像
    全体画像 2倍画像
    4倍にした画像 8倍にした画像
    4倍画像 8倍画像


  117. ジャパニーズ・アトラクタ(JapaneseAttractor)
  118. 世界最古のカオス・アトラクタ、いわゆるジャパニーズ・アトラクタ(京都大学・上田v亮の報告)を描画する例題です。
    なお、X/Y座標オーバフロー時は、便宜上 0 に設定しています。

    【出力例】

    実行時画面例 画面キャプチャした画像をもとに
    アニメーション化したもの
    実行時画面の画像 アニメーション



  119. ローレンツ・モデル(Lorentz Model)
  120. カオスの例題として定番のローレンツ・モデルを描いてみました。

    【出力例】

    以下は画面キャプチャした画像をもとにアニメーション化したものです。

    ローレンツ・モデルの動画



  121. エノン写像(Henon Map)
  122. エノン写像、これもカオスの例題としての定番かもしれません。

    【出力例】

    以下は画面キャプチャした画像をもとにアニメーション化したものです。

    エノン写像の動画



  123. リアプノフ・フラクタル(Lyapunov fractal)
  124. 解説されることの少ないリアプノフ・フラクタルの描画例を示します。

    【出力例】

    ABのときの画像 AABABの画像
    ABの画像 AABABの画像



  125. 燃える船フラクタル(Burning Ship fractal)
  126. 燃える船/バーニングシップ・フラクタルの描画例を示します。
    特に拡大画像その2の発散回数で色分けした画像は、
    「燃える船」がはっきりと現れています。

    【出力例】

    全体の画像
    (-2.5, -2.0)〜(1.5, 2)
    拡大画像その1
    (-0.84, -1.00)〜(-0.68, -0.84)
    拡大画像その2
    (-1.8, -0.08)〜(-1.7, 0.02 )
    全体画像 拡大画像その1 拡大画像その2
    上記を発散回数で色分け 上記を発散回数で色分け 上記を発散回数で色分け
    全体画像(色分け変更) 拡大画像その1(色分け変更) 拡大画像その2(色分け変更)


    なお、全体画像と拡大画像の位置関係は以下のとおりです。

    拡大画像その2(色分け変更)



  127. シェルピンスキのピラミッド
  128. シェルピンスキのビラミッドを描いてみました。

    【出力例】

    シェルピンスキのピラミッドの画像



  129. 相似縮小変換によるフラクタル
  130. 相似縮小変換によるフラクタルを描きました。

    なお、以下のファイルをインポートしていますので、併せてダウンロードしてください。

    2次元アフィン変換

    【出力例】

    相似縮小変換による画像例その1

    【その他の出力例】(以下のソースでも2次元アフィン変換をインポートしています)

    変換その2 変換その3 変換その4
    変換その2画像 変換その3画像 変換その4画像




  131. ランダム・コッホ曲線を利用した島形状の生成
  132. 曲線の X 座標を回転方向、Y 座標を半径方向に変換、すなわち極座標に変換することで島形状を生成します。
    ただし、最初の Y 座標と最後の Y 座標を合わせることで、最初と最後がつながるよう調整します。

      赤色の線    : 最初に求められた曲線
      緑色の線    : 調整後の曲線
      薄黄色の多角形 : 生成された島形状

    マウスの左ボタンクリックで新しい島形状を生成します。

    【生成例】

    島形状1 島形状2 島形状3
    島形状4 島形状5 島形状6




  133. 二次元波動シミュレーション
  134. 二次元波動のシミュレーションです。描画等が遅いので計算回数100回ごとに1回描画しています。
    さらに,マウスの左ボタンクリックごとに再描画し,画面キャプチャを容易にしています。

    以下は,画面キャプチャした画像をアニメーション化したものです。

    二次元波動シミュレーションの動画



  135. モルフォロジー変換(グレースケール版)
  136. モルフォロジー変換(グレースケール版)版です。
    カラー画像(BMPファイル)は内部的にグレースケールに変換しています。
    白黒画像は,グレースケールの最大・最小で判定していますので、
    結果的に処理可能です。

    構造体要素(カーネル)は,画面右上のマス目をクリックして指定します。
    赤色が有効要素,白色が無効要素,中央が着目要素です。

    以下のモジュールをインポートしていますので,併せてダウンロードして下さい。

    imagecanvasモジュール

    収縮
    (Erosion)
    膨張
    (Dilation)
    オープニング
    (Opening)
    クロージング
    (Closing)
    勾配
    (Gradient)
    トップハット
    (Tophat)
    ブラックハット
    (Blackhat)
    文字画像の
    勾配     
    文字画像の
    ブラックハット



  137. Kindle版「Python 3.6 による暦の作成」用ダウンロード
  138. 第1章 色々な暦

    基本的な処理
    Python3.6シェル画面への表示
    tkinterモジュールを用いた例

    第2章 元号と国民の休日

    元号一覧と日付用文字列生成
    元号一覧表示と暦への元号表示
    国民の休日一覧と休日計算
    暦への休日表示

    第3章 日本の暦の歴史と24節気

    日本の夏至と冬至一覧(1873〜2019)
    日本の冬至CSVファイル(1873〜2019)
    【参考】日本の冬至表(1873〜2019)Python 3.6
    二十四節気(sunLib.py)
    二十四節気を表示する暦(SekkiCalendar.py)

    第4章 日本の旧暦(天保暦)

    朔日を求める(moonLib.py)
    旧暦日付を求める(TempoCalendar.py)
    改元日を旧暦で求める(Gengo2.py)
    旧暦日付を暦に表示(NewAndTempoCalendar.py)



    第5章 日本流宣明暦と簡易法

    閏月一覧と検索(semmyouLeap.py)
    元号一覧(Gengo3.py)
    簡易法のための一覧表(monthTabLib.py)
    大衍暦・宣明暦を考慮した旧暦(TempoCalendar2.py)
    大衍暦・宣明暦を暦に表示(NewAndTempoCalendar2.py)



    第6章 日本古代の暦

    元号一覧(Gengo4.py)
    簡易法のための一覧表(monthTabLib3.py)
    元号表示(semmyouLib3.py)
    元嘉暦・儀鳳暦を考慮した旧暦(TempoCalendar3.py)
    元嘉暦・儀鳳暦を暦に表示(NewAndTempoCalendar3.py)

    以下は,貞享暦,宝暦暦,寛政暦に対応した一覧表です。
    プログラムを from monthTabLib3 import * ⇒ from monthTabLib4 import * と
    変更してお使いください。

    簡易法のための一覧表拡張版(monthTabLib4.py)



    第7章 中国古代の暦

    漏刻(水時計)のシミュレーション(waterClock.py)
    中国古代暦の共通関数(kodaiLib.py)
    太初暦(taisho.py)
    四分暦(shibun.py)
    景初暦(keisho.py)



    第8章 秦王朝の暦の再現

    センギョク暦の暦元の確認(list_8_1.py)
    立春の確認(sengyokuRiss.py)
    二十四節気リスト(sengyokuSekki.py)
    センギョク暦とユリウス暦の対応(sengyoku.py)



  139. Kindle版「Pythonによる数値解析入門」ソースプログラム用ダウンロード
  140. 第 1章

    第 2章

    第 3章

    第 4章

    第 5章

    第 6章

    第 7章

    第 8章

    第 9章

    第10章

    第11章

    第12章

  141. おもちゃみたいなプロダクション・システム(YS Tiny Rule Base)
  142. ここからダウンロードできます

  143. おもちゃみたいな診断システム(YS Tiny Diagnosis)
  144. 本システムは,いわゆる診断システムの複雑な部分を一切カットし,
    徹底的に単純化して分かりやすくしたものです。
    MYCIN等のコンテキスト・ツリー等の考え方もありません。
    学習用としてお使いいただけると思います。

    ここからダウンロードできます

    以下は,YS Tiny Diagnosis内の例題をキャンセルして,
    新たにルール等を再定義する例です。

    ルール等の再定義例

    以下は,条件部にand, or, not等を指定する例です。
    条件部へのand, or, notの指定例

  145. ファジー演算学習用
  146. 本プログラムは,ファジー演算の学習用の関数群です。

    ここからダウンロードできます

    【ファジー集合がお互いに独立な場合の演算】
    マムダニの方法
    wangとMendelの方法
    整数化による低CPUでのモデル化

    【ファジー推論】
    マムダニの方法
    wangとMendelの方法

    【ファジー制御例】
    ハンドルの操作
    アクセルとブレーキの操作

  147. ニューラル・ネットワーク
  148. 単一ニューロン学習
    単層パーセプトロン学習
    二層パーセプトロン学習
    三層以上のパーセプトロン学習
    パーセプトロン学習(例題1)
    パーセプトロン学習(例題2)
    ボルツマン・マシン実行
    ボルツマン・マシン学習

  149. 分類問題
  150. データ生成用共通モジュール

    グラフ等表示モジュール

    k-NN法

    簡易的なクラス境界(共通関数)

    簡易的なクラス境界(例1)

    簡易的なクラス境界(例2)

    決定表共通関数

    決定木描画

    決定木をPythonソース・プログラムに変換

    決定表のルール結合

    決定表のソート

    ジニ係数による決定木の学習

    決定表から決定木に変換(Pythonシェル画面)

    決定表から決定木に変換(描画)

    ソース・プログラム生成例

    決定表のルール結合例

    ジニ係数による決定木学習の指定例

    SOMアルゴリズム

    以下は,SOMアルゴリズムによる分類の画像例です。
    SOMアルゴリズムによる分類の画像

  151. Tiny Tierra
  152. ティアラ(Tierra)の初期バージョンの仕組みをより単純化して
    Pythonで表現したシステムです。
    仮想マシン・アセンブラ

    仮想マシン・アセンブラ・テスト用プログラム

    仮想マシン・インタプリタ

    仮想マシン・インタプリタ・テスト用プログラム

  153. 蟻コロニー問題のアニメーション
  154. アニメーション・プログラム

  155. 遺伝的アルゴリズム(GA)の簡単な例
  156. @最も単純な例

    以下は,交叉率0.3,突然変異率0.1, 選択率0.6で
    1000回の繰り返しで得られた結果です。

    初期値

       0:0010111100 0.5000
       1:0110101000 0.3000
       2:1101100100 0.2000
       3:1010001101 0.4000
       4:0110010110 0.7000
       5:1101100001 0.1000
       6:1010001010 0.3000
       7:1111000011 0.1000
       8:0101010010 0.5000
       9:1000011101 0.5000

    適応度の高い遺伝子
       4:0110010110

    結果
       0:0010010110 0.7000
       1:0010010110 0.7000
       2:0011010110 0.7000
       3:0010010110 0.7000
       4:0010010100 0.7000
       5:0010010100 0.7000
       6:0010010110 0.7000
       7:0010010100 0.7000
       8:0010010110 0.7000
       9:0110010110 0.7000

    適応度の高い遺伝子
       0:0010010110
       1:0010010110
       2:0011010110
       3:0010010110
       4:0010010100
       5:0010010100
       6:0010010110
       7:0010010100
       8:0010010110
       9:0110010110

    AOne Max問題

    以下は,遺伝子の数10, 遺伝子の長さ8,
    交叉率0.5,突然変異率0.1, 選択率0.4で
    5000回の繰り返しで得られた結果です。

    なお,以下は最も良い結果であり,
    試行によっては0が混じることもあります。

    初期値
       0: 1010 0100 0.3750
       1: 1001 1011 0.6250
       2: 1100 1000 0.3750
       3: 0000 1101 0.3750
       4: 0010 0001 0.2500
       5: 0000 1000 0.1250
       6: 1001 0001 0.3750
       7: 1100 1100 0.5000
       8: 1100 1010 0.5000
       9: 0111 0000 0.3750

    適応度の高い遺伝子
       1: 1001 1011

    結果
       0: 1111 1111 1.0000
       1: 1111 1111 1.0000
       2: 1111 1011 0.8750
       3: 1111 1111 1.0000
       4: 1111 1111 1.0000
       5: 1111 1111 1.0000
       6: 0111 1111 0.8750
       7: 1111 1011 0.8750
       8: 1111 1011 0.8750
       9: 1111 1111 1.0000

    適応度の高い遺伝子
       0: 1111 1111
       1: 1111 1111
       3: 1111 1111
       4: 1111 1111
       5: 1111 1111
       9: 1111 1111

    B N王妃問題

    それぞれの行のクィーンの桁位置を番号(整数)で表現します。
    異なる行の同じ桁位置にクィーンは存在しませんから,
    すべての染色体は異なる番号になります。

    したがって,すべて異なる番号を含んでいない場合, 適応度を最低にします。
    初期値によって結果がかなり変わりますので,
    5回程度の試行で初期設定からやり直します。

    通常,整数で遺伝子を表現する場合,
    乱数で置き換えるという方法を採用しますが,
    この問題の場合,
    同一染色体内に同一の番号があると困りますので,
    同一染色体内の他の遺伝子と取り替える方法を採用します。

    以下は,クィーンの数8(8 Queen), 染色体の数100, 染色体内遺伝子の個数(遺伝子の数=クィーンの数)=8,
    交叉率0.3,突然変異率0.3, 選択率0.4で
    5×100回の繰り返しで得られた結果です。

    したがって初期設定のやり直し回数は100回です。

    遺伝的アルゴリズムによる8クイーンの画像

    C巡回セールスマン問題(ビットパターンで次の都市を示す方法)

    ビットパターンで次の都市を表現する方法によって
    巡回セールスマン問題をGAで表現してみました。

    例えば,6都市の場合, 0番目の遺伝子0010000は0番目の都市の次は2番目,
    2番目の遺伝子0000100は2番目の都市の次は4番目の
    都市を示します。

    初期値によって,結果がかなり変わりますので,
    5回程度の試行で初期設定からやり直します。

    以下は,都市の数6, 染色体の数200,染色体の長さ=6×6=36,
    交叉率0.4,突然変異率0.2, 選択率0.6で
    5×100回の繰り返しで得られた結果です。

    したがって初期設定のやり直し回数は100回です。

    なお,以下は最も良い結果であり,
    試行によっては最適解でない結果もあります。

    都市の座標値
      No.  X         Y
      --------------------
       0  0.0000,  0.0000
       1 20.0000,  0.0000
       2  0.0000, 20.0000
       3 20.0000, 20.0000
       4  0.0000, 40.0000
       5 20.0000, 40.0000

    最大適応度: 0.008333333333333333
    最適解:
       0: 010000 000100 100000 000001 001000 000010
         P0→P1→P3→P5→P4→P2→P0

    D巡回セールスマン問題(都市番号を遺伝子とみなす方法)

    都市番号(整数)で遺伝子を表現する方法を示します。
    遺伝子の位置が訪問順序を示します。

    最後の都市番号の場合,先頭に戻るものとします。

    前述のビットパターンで示す方法より,処理が単純になります。
    この方法でも,初期値によって結果がかなり変わりますので,
    5回程度の試行で初期設定からやり直します。

    通常,整数で遺伝子を表現する場合,
    乱数で置き換えるという方法を採用しますが,
    巡回セールスマン問題の場合,
    同一染色体内に同一の都市番号があると困りますので,
    同一染色体内の他の遺伝子と取り替えるという方法にします。

    以下は,都市の数8, 染色体の数400, 染色体内遺伝子の個数(染色体の数=都市の数)=8,
    交叉率0.5,突然変異率0.1, 選択率0.4で
    5×100回の繰り返しで得られた結果です。

    したがって初期設定のやり直し回数は100回です。

    また,適応度については,得られた適応度を100倍にしています。

    なお,以下は最も良い結果であり,
    試行によっては最適解でない結果もありえます。

    都市の座標値
      No.  X         Y
      --------------------
       0  0.0000,  0.0000
       1 20.0000,  0.0000
       2  0.0000, 20.0000
       3 20.0000, 20.0000
       4  0.0000, 40.0000
       5 20.0000, 40.0000
       6  0.0000, 60.0000
       7 20.0000, 60.0000

    最大適応度: 0.625
    最適解:
       0: 0135 7642
         P0→P1→P3→P5→P7→P6→P4→P2→P0
       1: 0246 7531
         P0→P2→P4→P6→P7→P5→P3→P1→P0

  157. 遺伝的プログラミング(GP)の簡単な例
  158. プログラム例

    なお,以下のモジュールをインポートしていますので
    併せてダウンロードしてください。

    GP基本処理

    構文木アクセス関連

    簡易構文解析(構文木生成まで)

    簡易語彙解析

    初期状態実行結果
    初期状態 実行結果

  159. 粒子群最適化の簡単な例
  160. 粒子群最適化の一次元の例

    X位置各粒子のX位置変化グラフ
    適応度各粒子の適応度変化グラフ

    粒子群最適化の二次元の例

    初期状態途中経過収れん間近収れん後
    初期状態の画像 途中経過の画像 収れん間近の画像 収れん後画像

  161. 蟻コロニー最適化の簡単な例(巡回セールス問題への適用)
  162. 基本的なアルゴリズムによるプログラム

    実行例

    蟻コロニー最適化の実行例

    蟻コロニー最適化(8×8)の実行例

    蟻コロニー最適化(8×8)の実行例

  163. 辺近傍法の簡単な例(巡回セールス問題への適用)
  164. プログラム例

    基礎的な関数群

    都市座標の設定

    初期4都市の設定

    描画および表示用関数

    初期4都市以外の挿入

    都市挿入・交換処理関数


    辺近傍法画像

    TSP画像例

  165. 昔懐かしのライフ・ゲーム
  166. @基本的なプログラム例


    ライフ・ゲーム実行例

    Aカラフルなプログラム例


    カラフルなライフ・ゲーム実行例

    B上下,左右を連結したサイクリックなプログラム例

    なお,これは以下のようなトーラス上のセルを表現したものと同一です。

    リングをメッシュで区切った絵

  167. 一次元セル・オートマトン
  168. @基本的なセル・オートマトン

    No.030No.060No.090
    CA No.030 CA No.060 CA No.090
    No.110No.182
    CA No.110 CA No.182


    A総和型セル・オートマトン

    以下の例は,
    【方法1】x(t,k)=(x(t-1,k-1)+x(t+1,k-1)) % 剰余
    【方法2】x(t,k)=(x(t-1,k-1)+x(t-1,k)+x(t+1,k-1)) % 剰余
    で求めた例です。
    色は,値を示します。色と値の対応はプログラムを参照してください。

    方法1 剰余4方法2 剰余4方法2 剰余8
    方法1 剰余4 方法2 剰余4 方法2 剰余8


    B連続空間オートマタ

    ここでは,前時刻と現時刻の状態が振動方程式,
    すなわち以下の式で表されるものとします。

    振動方程式

    左辺が2次微分になっていますので,上記方程式を以下のように解釈します。

    振動方程式の解釈

    差分方程式は次のようになります。

    差分方程式

    なお,以下の例は,R(v)=0のときの例です。
    R(v)=-μ・v (μは動粘性抵抗)と設定すると
    波が徐々に減衰する状態を観察できます。

    初期状態 5秒後 2つの波に分離 10秒後 両方向に進む
    初期状態 5秒後 10秒後
    20秒後 両方向に進む 30秒後 壁に衝突 40秒後 中心に進む
    20秒後 30秒後 40秒後
    50秒後 中心に進む 60秒後 衝突間近 63秒後 衝突後の状態
    50秒後 60秒後 63秒後


    前時刻と現時刻の状態が拡散方程式,
    すなわち以下の式で表されるものとします。

    拡散方程式

    ここでDは,拡散係数を示します。差分方程式は次のようになります。

    差分方程式

    一次元における拡散方程式では, 拡散係数Dが0.5未満のとき,
    徐々に広がりながら値も小さくなって,
    最後はなくなります。

    拡散係数Dが0.5を超えるとき,
    急速に値が大きくなりながら,その範囲を広げ,
    最後は,範囲外に飛び出してしまいます。

    拡散係数Dが0.5に等しいとき,
    途中から振動状態になりはじめ,
    振動範囲の全体は,最終的に一定形状になるものの,
    常に振動を続けます。
    すなわち全体形状は一定ながら
    振動している。いわば「カオス」状態といえます。
    以下に,初期値と定常状態での振動形状を示します。

    なお,D=0.5, R(u)=u(u-1)としています。

    初期状態 定常状態(ただし振動している)
    初期状態1 振動する定常状態1
    初期状態2 振動する定常状態2

  169. 鳥もどき(Boids: bird oid)
  170. 個体の動きのシミュレーション

    鳥もどき(ボイド)

  171. カッコウ探索(CS: Cuckoo Search)
  172. カッコウ探索プログラム

  173. 魔方陣(Magic Square)
  174. ヒンズー連続方式,バシェー方式,桂馬飛び法

    式の確認

    LUX法

    4の倍数×4の倍数魔方陣

    MN×MN魔方陣

    奇数・偶数分離魔方陣

    上記プログラム例で共通する関数群を以下のモジュールとしてまとめました。

    魔方陣用共通関数群

    以下は,共通関数群を用いて「式確認」以外を書き直したものです。
    なお,魔方陣の表示形式を変更しています。

    ヒンズー連続方式,バシェー方式,桂馬飛び法

    LUX法

    4の倍数×4の倍数魔方陣

    MN×MN魔方陣

    奇数・偶数分離魔方陣

  175. ナンプレパズル(Number Place Puzzle)
  176. ナンプレパズル

    以下の共通関数群を使用しています。
    合わせてダウンロードしてください

    ナンプレパズル共通関数群

    以下もご参照ください。

    プログラムによる解法

    プログラムによる解法のテスト


    ナンプレパズルの自動生成

    自動生成テスト(Pythonシェル画面版)

    自動生成テスト(キャンバス版)

    自動生成組込みナンプレパズル

    【ナンプレの数字を絵柄にする】

    以下の画像を用います。
    数字の絵柄

    以下をダウンロードし解凍して
    ソースプログラムと同じフォルダの下に
    サブフォルダgifを作成して格納してください。

    数字を絵柄にするための画像データ

    画像を表示するための簡単なプログラム例


    以下は数字の替わりに絵柄を表示するナンプレ用の
    ソースプログラムです。
    絵柄等を変えてお楽しみ下さい。

    絵柄表示用のナンプレパズル共通関数群

    絵柄表示用の自動生成

    絵柄表示用の自動生成テスト

    絵柄表示ナンプレパズル(イメプレ)

    拙著Kindle版「Pythonで作るナンプレパズル」では,
    自動生成画面では数字になっていました。
    以下のソースプログラムを使うことで,
    自動生成画面も絵柄になります。

    絵柄表示用のナンプレパズル共通関数群2

    絵柄表示ナンプレパズル(イメプレ)2

    イメプレ・サンプル