「作って動かすALife」で人工生命を学ぶ その01 Gray-Scottモデル
2024-10-29 06:52:44
クライストチャーチの図書館ではE-Bookの閲覧も結構豊富なので、
興味がある人工生命分野の何かの本を読んでみようと思った。
この本は人工生命の様々なアプローチを一冊にまとめて、しかも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__関数の最後を書き換えると良いとあったので、
それを実際にやってみると、
動いた!
まだ初期化しかしていないので、何も動かないけど、とりあえず最初の1歩。
その後、ラプラシアン計算やGray-Scott方程式をプログラムに組み込んでいくと、
Stripe柄
Spot柄
などの模様を作ることができた。
ラプラシアン計算などは難しいけど、なんとか理解できたし、
Numpyの使い方とかも学べた(np.rollとか)
次は同じ2章だけど、セルオートマトンで、ライフゲーム。
これは馴染みある話題なので、結構簡単にできそう。
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.