「作って動かすALife」で人工生命を学ぶ その01 Gray-Scottモデル

2024-10-29 06:52:44

クライストチャーチの図書館ではE-Bookの閲覧も結構豊富なので、
興味がある人工生命分野の何かの本を読んでみようと思った。

作って動かすALife ―実装を通した人工生命モデル理論入門
岡 瑞起(著), 池上 高志(著), ドミニク・チェン(著), 青木 竜太(著), 丸山 典宏(著)

この本は人工生命の様々なアプローチを一冊にまとめて、しかもPythonで実装できるというので手を出してみた。

まえがきや1章を読んで、現在2章。
今の環境だと動かないところもあったので、書き残しておく。

まずは環境情報。

MacBookAir の、2023 M2

$ sw_vers
ProductName:		macOS
ProductVersion:		14.6.1
BuildVersion:		23G93

そして準備

$ mkdir alife_oreilly
$ cd alife_oreilly
$ python -m venv .venv
$ source .venv/bin/activate
$ pip install --upgrade pip

まえがきで触れてあったように、各ライブラリを入れる。

$ pip install numpy
$ pip install vispy
$ pip install PyQt5

PyQtは、今はPyQt6も出ているのだが、本に合わせて5にする。

で、ここまで入れて、普通に2章のGray-Scottモデルを進め、
いざ実行しようとしたら、下記エラーが出た。

$ python gray_scott.py 
Traceback (most recent call last):
  File "/Users/tavi/develop/python/alife_oreilly/src/chap02_gray_scott/gray_scott.py", line 4, in <module>
    from alifebook_lib.visualizers import MatrixVisualizer
  File "/Users/tavi/develop/python/alife_oreilly/src/chap02_gray_scott/../alifebook_lib/__init__.py", line 1, in <module>
    import vispy
  File "/Users/tavi/develop/python/alife_oreilly/src/.venv/lib/python3.12/site-packages/vispy/__init__.py", line 27, in <module>
    from .util import config, set_log_level, keys, sys_info  # noqa
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tavi/develop/python/alife_oreilly/src/.venv/lib/python3.12/site-packages/vispy/util/__init__.py", line 14, in <module>
    from . import fonts       # noqa
    ^^^^^^^^^^^^^^^^^^^
  File "/Users/tavi/develop/python/alife_oreilly/src/.venv/lib/python3.12/site-packages/vispy/util/fonts/__init__.py", line 13, in <module>
    from ._triage import _load_glyph, list_fonts  # noqa, analysis:ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tavi/develop/python/alife_oreilly/src/.venv/lib/python3.12/site-packages/vispy/util/fonts/_triage.py", line 14, in <module>
    from ._quartz import _load_glyph, _list_fonts
  File "/Users/tavi/develop/python/alife_oreilly/src/.venv/lib/python3.12/site-packages/vispy/util/fonts/_quartz.py", line 12, in <module>
    from ...ext.cocoapy import cf, ct, quartz, CFRange, CFSTR, CGGlyph, UniChar, \
  File "/Users/tavi/develop/python/alife_oreilly/src/.venv/lib/python3.12/site-packages/vispy/ext/cocoapy.py", line 1288, in <module>
    quartz = cdll.LoadLibrary(util.find_library('quartz'))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tavi/.asdf/installs/python/3.12.5/lib/python3.12/ctypes/__init__.py", line 460, in LoadLibrary
    return self._dlltype(name)
           ^^^^^^^^^^^^^^^^^^^
  File "/Users/tavi/.asdf/installs/python/3.12.5/lib/python3.12/ctypes/__init__.py", line 379, in __init__
    self._handle = _dlopen(self._name, mode)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: dlopen(Quartz.framework/Quartz, 0x0006): tried: 'Quartz.framework/Quartz' (no such file), '/System/Volumes/Preboot/Cryptexes/OSQuartz.framework/Quartz' (no such file), '/Users/tavi/.asdf/installs
/python/3.12.5/lib/Quartz.framework/Quartz' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/tavi/.asdf/installs/python/3.12.5/lib/Quartz.framework/Quartz' (no such file), '/opt/homebrew/lib/Qu
artz.framework/Quartz' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/Quartz.framework/Quartz' (no such file), '/Users/tavi/.asdf/installs/python/3.12.5/lib/Quartz.framework/Quartz
' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/tavi/.asdf/installs/python/3.12.5/lib/Quartz.framework/Quartz' (no such file), '/opt/homebrew/lib/Quartz.framework/Quartz' (no such file), '/S
ystem/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/Quartz.framework/Quartz' (no such file), '/usr/lib/Quartz.framework/Quartz' (no such file, not in dyld cache), 'Quartz.framework/Quartz' (no such file)

Googleさんに聞いてみると、
どうやらvispyで今年5月あたりに修正が入ったみたい。
だけど、その時期の修正ならもうすでに本体に取り込まれているはずだからおかしいなと思って、
もっと調べてみると、

Fix MacOs 14 Sonoma dlopen cache lookup by takacsmark · Pull Request #2549 · vispy/vispy

このIssueの最後に、情報があったので、

$ pip install pyopengl

とやってみると、
起動はしたのだが、何も表示されない。

調べると、

gray_scott.pyが動かない · Issue #29 · alifelab/alife_book_src

の最後に、
matrix_visualizer.pyの__init__関数の最後を書き換えると良いとあったので、
それを実際にやってみると、

learning_oreilly_alife_01_01

動いた!

まだ初期化しかしていないので、何も動かないけど、とりあえず最初の1歩。

その後、ラプラシアン計算やGray-Scott方程式をプログラムに組み込んでいくと、

Stripe柄

learning_oreilly_alife_01_02

Spot柄

learning_oreilly_alife_01_03

などの模様を作ることができた。
ラプラシアン計算などは難しいけど、なんとか理解できたし、
Numpyの使い方とかも学べた(np.rollとか)

次は同じ2章だけど、セルオートマトンで、ライフゲーム。
これは馴染みある話題なので、結構簡単にできそう。




Comments

There are currently no comments on this article, be the first to add one below

Add a Comment

Note that I may remove comments for any reason, so try to be civil. If you are looking for a response to your comment, either leave your email address or check back on this page periodically.