2026年2月28日土曜日

うちの開発言語について

 とにかく僕は開発言語には拘ってない。
外部の助言はあるけど、やってることを説明するのが大変なので
けっこうスルーしてるかな・・・。

こういうネットでデモやるならJavaScriptみたいのでいいし、
ある程度の骨格がつかめたらPythonに落とす。
普段の実験ならPythonでいいし。

ガンガン回して実験結果を見て判断するのはPythonとC++かな。
C++は大規模ノードでどうなるか、長時間回したときの安定性、数値誤差の影響、つまりは現実条件での検証に最適なんだよね。
今のところ、JavaScriptで思想作って、Pythonで回して、C++が現実みたいな。

Atronは

  • 成長

  • 不可逆性

  • 体験の蓄積

  • 長時間の変化

つまり短いテストでは分からないんだよね

Python:探索  C++:時間を回す

それと、数式をcodeに落とし込むならC++は理想だよ。
ロボット研究者に多い。

例えばAtron的な式:

xi(t+1)=f(jwijxj(t))x_i(t+1) = f\left(\sum_j w_{ij} x_j(t)\right)

これをC++にすると

--------C++--------

for (int i = 0; i < N; i++) { double sum = 0.0; for (int j = 0; j < N; j++) { sum += W[i][j] * x[j]; } x_next[i] = f(sum); }


ほぼ、そのままじゃん。
微分方程式系もそのまま書ける


dxdt=x+f(Wx)\frac{dx}{dt} = -x + f(Wx)

オイラー法なら


for (int i = 0; i < N; i++) { dx[i] = -x[i] + f(input[i]); x[i] += dt * dx[i]; }


C++は研究者向きなんだよね。


森田先生の非単調
--------C++--------

double f(double x) { if (x > theta) return 1.0; if (x < -theta) return -1.0; return x; }

エネルギー関数

--------C++--------

double energy = 0.0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { energy -= W[i][j] * x[i] * x[j]; } }


Atronは数式の時間発展が人格になるのでC++は理想かな。
Pythonは使うよ。ただ、長い時間回すとなるとさ、

--------Python--------

for i in range(N): for j in range(N): sum += W[i][j] * x[j]

ループで死ぬ。
このタイプじゃない方法があれば教えてほしいんだけど、C++の 10〜100倍遅くなる。
(マジで誰かいい方法あったら教えて)


いきなり完成品を作れよ!とか言われたらそりゃCとか選ぶんだろうけど、研究室で試行錯誤を回すための言語とは思えない。今から畑耕して土触って今年の気候判断して「植えるもの変えよう!」とか、やってられない。

けっこうCを助言してくる人多いけど、
ほれ、こういうの説明するのめんどくさいから「流石ですね、そうですね」で終える。


C / C++ / Python の思想比較

言語世界観
C        自由。責任は全部あんたさ
C++        自由+秩序。選ぶ
Python        秩序。危険はさせない
 

この前、TurboC触った時に計算資源が少ないからさ、「ルールで済ませちゃおうか!」って思考が働くわけよ。あれは危ないと思ったよ。うかうかしてたらアルゴリズムになってしまう。僕の研究はアルゴリズムじゃないからね。3人称とか入れられないのよ。Atronの「一人称の競合・揺れ、正解が無い」なので、それを潰すわけにはいかないのよ。デバックが大変だしね。
ただ、あれのいいところは"何が本質か"がはっきり出るところだよね。

なので、場面場面で使う言語は変わる。


本当はさ、昔のHypercardみたいのでもいいと思ってるだ。
漢字talk6.7くらいの覚えてるけど、めちゃくちゃ楽しかった。
大規模数値計算つーか、ポッピーみたいな(Hopfield的な連続計算)ものとか、
行列演算・エネルギー最小化、高速な反復シュミレーションが出来ないだけで、それが出来たら、全部やめてHypercardでいいと思うくらい(笑)

スタックという概念が最高にいい
stack=経験
script=内部力学
card=状態
button=行動
Link=連想
とか出来るじゃん。

本当は、こういうのでガンガン回して収束比較とかしたい。
たぶん実験成果が上がると思うんだよね
でも、カメラ駄目、センサー駄目、外部危機駄目じゃん。
だから、本当にオシイと思う。
あんないいものを、なんで終わらせたのか、よく分からない。
CPUやGPUを意識せず、世界と記憶だけを作れるHyperCardあったら買います!

開発言語とは関係ないけど、FileMakerも実験室のように、ある程度外部データを送り込むものに使っているけど、Webビューアーのボトルネックとか、なんかクラリス・スタジオとか更新される機能がよく分からなく、かえってPython単体より構造が複雑になる傾向があるので少し離れてる。だから、FileMakerはGanttと論文や資料のPDFのフォルダ管理、文献管理、気になったらFMから立ち上げて・・・みたいな。
頭の整理にはObsidianと両方使ってる

普段使うエディタなんてnotepad++とかVSとか
共同研究者とまではいかないけど、テキスト書くのもnotepad++使ってるよ。
Emacsまでは要らないし・・・


でも、ゆくゆくは3Dゲーム屋さんとの連携があるので、


ゲームエンジンとIDE






3Dワールド(Unity / Unreal)
↓ センサー情報
Atron Core(Python / C++)
↓ 行動決定
3Dワールドに返す

つまりは、3Dがシーンによって外界になるってこと。

アソシアトロンと3Dは、一体化させるつもりはないよ。
だって別物だもの。3人称に引きずられたら、Atronは終わるからね。
NavMeshで最短経路とかState Machineで行動制御とかやっちゃったらもう僕の研究じゃなくなる。

Atron = 内部(意味・記憶)で、外界(3D)の中で経験を積むみたいなシーンもあれば
現実の映像や風景、人の会話での経験も積む。

これを守れてるかで、一人称か三人称かが分かれる。

  • 3D側に「賢さ」が入ってないか?

  • 3D側が「正解の行動」を持ってないか?

  • Atronが迷ってる時に、3Dが助けてないか?

  • 行動が“目的最適化”に寄ってないか?

  • 誤学習や固執が、そのまま世界に出ているか?

だから、自律が完成しても自律はスタートであって、その先を間違えたらただの鉄屑で終わってしまうわけ。


---------------追記----------------

Pythonは NumPyだ。これで速くなる

x = np.array(現在の状態ベクトル, dtype=np.float32)
new_x = W @ x 

0 件のコメント:

コメントを投稿

outlawだってさ。ありがとよ。 - Associatronと一人称自律

 オランダからメールが来たよ。 「Atraもいいけど、outlawだろ、」ってさ 最高だよ。 outlaw architecture ってのは間違いないよねw 実際、僕は、流れや制度・分類・学派・評価体系の外にいる者だし、そういうのあまり大切にしていない。今の大学の事は分からない...