2026年4月6日月曜日

力こそパワー

↑blog を読み込ませて AIで生成w  日本語がシュールwww

■動機

PS1 の ZEUS: カルネージハート セカンド (以下 CH) というゲームがあって (ゲームの詳細は過去の blog 参照),CH の OKE ソフトのプログラミングはチップを並べる事によって行うので,編集作業が大変.
で,OKE ソフトをプログラミング言語で組めたらいいなぁとずっと思っていたので,やってみた.目的はもう一つあって,AI に聞きながら,もしくはコード生成を丸投げしてどこまでのことができるのか試したくなった.

というわけで OKE Chip Compiler (okecc) プロジェクト開始.ちなみに Github で公開してます.

■AI の威力

okecc のやるべきことは 2つ.言語から CH のチップ群に変換する言語パーサと,チップを処理の流れに従って矛盾なく並べる配置処理.前者は過去経験があるので良いとして,後者をどうやったらいいのか見当もつかないので,AI に聞いてみる.

  • MxN のグリッドにチップを並べる問題を解くアルゴリズム
  • チップの接続関係はすでに定義されている
  • チップは縦横斜めの 8方向に隣接したチップと接続できる
  • それ以上離れている場合は NOP チップで接続する.
  • MxN のグリッドに全チップを並べ,NOP 数を最小化することがゴール.

という問題を与えてみたところ,最初は巡回セールスマン問題とかずれた回答をしていたが,こちらが補足として CH の名を出したとたん AI の理解が急速に進み,CH の内容を正しく理解していることにびっくり.それでいくつかアルゴリズムの案をだしてきた.

  • この問題をグラフ理論とみなして既知のアルゴリズムを適用: CH の離れたチップは NOP チップで接続する必要があり,つまり配線スペースが必要だが,既知のアルゴリズムではそれは考慮されないという課題あり
  • 機械学習: 教師データの準備が大変という課題あり
  • 焼きなまし法: AI のおすすめ.全数探索が不可能な問題はとりあえずこれだそうで.

ここでダメ元で「焼きなまし法のコードを出して」とお願いしたら,それなりに動くコードが出てきてまたびっくり.焼きなまし法はおぼろげな知識はあるが,正確なやり方は知らなかったので,実際に動くコードがあるのと無いとでは自分の理解が断然違う.AI が吐いた最初期のコードだけでも下図のようなまともな配置を吐くことができて,このプロジェクトが成功する手応えを得た.

ちなみにこれ,SVG で出力したものを Web ブラウザで表示していて,SVG 出力のコードはは 100% AI が吐いてくれた.こういった,誰かがもうやっているであろうコードを吐くのは AI は得意そう.

■AI の限界

上の配置図は一見まともだが,黄色の箇所とか配置がおかしく,正解ではない.

ここで焼きなまし法の流れを簡単に説明すると,以下のようになっている.

  1. 今のチップ配置を元に次のチップ配置を生成する.ランダムに 1チップ選び,高確率で隣接するチップと入れ替えるか,低確率でランダムな場所とスワップする.
  2. チップ配置のスコアを計算する.接続するチップが離れていたら離れているマス数分のペナルティ,またそのチップ間のパスが他のチップ上を通過していたら大ペナルティ
  3. 前回のチップ配置からスコアが良化すれば新しいチップ配置を採用,スコアが悪くても確率で採用するが,解の探索が進むごとにその確率は少なくしていく.

で AI が吐いたコードは色々課題があって,

  • 解けない配置にハマると,一度スコアが悪い状態を経ないと正解にはたどり着けないが,その頃には「スコアが悪くても確率で採用」の確率が低くなっているため,スコアが悪い状態を許容出来ない
  • そうなってしまう主な理由は,次のチップ配置の生成がランダム要素が強く,スコアが良化する配置が生まれにくいため,良い配置に収束するのに時間がかかりすぎているため

という問題があることがわかった.そこの問題点を指摘して AI にコード吐かせてみたが,たいして効果が無かったり,的外れであったりと,この時点では AI はさほど有用ではなかった.
CH のチップ配置という誰もやったことがないことに対しては,どこにも参考となるコードがないから,AI もまともな回答はできないようだ.このあたりが AI の限界だなぁと悟った次第.

■力こそパワー

で「より良い配置を生みだしやすくする配置生成アルゴリズム」は結局のところ人間の力で考えるしか無いが,アルゴリズムさえ考えて指示すれば,AI はちゃんとコードを吐いてくれる.
そうしたアルゴリズムを追加していった結果,チップ数が多い場合でも数十回に 1回ほど配置が成功するようになったので,後はマルチスレッド + 正解するまでループ,の力技で正解を探索するようにした.結局最後は CPU パワーがすべてを解決するw

ようやく実用的なものが出来たヽ(´ー`)ノ

今回 AI を活用してソフトを開発してみた感想としては,AI は「ネット上の膨大な知識を持っている社外工」だと感じた.
例えば最新 C++ の書き方を教えてくれたり,あと PS1 メモリカードイメージファイルから,特定のゲームのセーブデータを抜き出すコードなんかも一発で書いてくれた.
ただし誰もやったことがないことをアルゴリズムレベルまで落とし込むのはまだまだ人間の仕事で,そこら辺は考えてくれないところが社外工っぽい.あとまれに間違ったコードを吐いたりもするので,そこの W チェックが必要なのも,社外工と仕事やってる感覚と似てるなぁと思った.

2026年2月28日土曜日

JOG 3KJ アクセルワイヤ交換

JOG 3KJ のアクセルの戻りが怪しくなってきた.減速しようとスロットルを戻しても ksk が止まらなくて怖い.
で注油すれば治るかな? と見てみたら,折れてる? なので交換することにした.

でアクセルワイヤ交換のためにはカウルは全部取っ払う必要がある.

アクセルワイヤは,アリエクから 3KJ 用のものを送料込¥1487 で get.3KJ のパーツは海外でまだ売ってるので助かる.
実際に使えるかどうか心配だったが,長さが 5cm ほど長いだけで問題なかった.

純正よりちょっと長いのでワイヤの取り回しがちょっとあまり気味だが,動作には問題なかった.
アクセルも軽くなって満足ヽ(´ー`)ノ

外した純正ケーブルは,中間に謎のパーツが付いてるけどなんだろう? こんなん初めて見た.
 

2026年1月3日土曜日

3DS の立体視を VR で再現

 任天堂 3DS は裸眼 3D ディスプレイという空前絶後の機能がついていたが,自分が知る限り周りは皆 3D 機能を OFF していた.自分は特にモンハンで,モンスターとの距離が把握しやすいので 3D ON にしていたので,3D にはそれなりに思い入れがある.

で,3DS エミュと VR ヘッドセットの PICO4 で立体視できんかな? といろいろ調べてみた結果,それなりに動いたので手順を紹介する.

基本的な仕組み

  1. Win 用 3DS エミュの Citra の画面を PICO4 に映す.
  2. Steam の Desktop+ という無料アプリで,特定のウィンドウ (or デスクトップ全体) を PICO4 に映すことができる.その時,SBS (Side-by-Side: 右目 / 左目の映像を横に並べた表示) 形式を 3D で表示できる.
  3. Citra は 3DS の映像を SBS 形式で表示できる

という感じ.基本的に Citra / Steam VR の機能なので,おそらく Meta Quest でも出来ると思う.

設定手順

  1. Desktop+ をインストール: Steamで「Desktop+」をインストールしておく.
  2. Citra の設定: Citraの エミュレーション → 設定 → グラフィック → 立体視 を開き,「Stereoscopic 3D Mode」を「Side by Side」に変更する.
  3. SteamVR と Desktop+ の起動: PICO4側でSteamVRを立ち上げ,Desktop+を起動する.
  4. ウィンドウの取り込み: Desktop+の「+」ボタンを押し,表示するウィンドウとして「Citra」を選択.
  5. 3D表示の有効化: 右下のウィンドウ一覧からCitraを選択し,プロパティ → 実績(※設定項目)にある「3D」にチェックを入れ,「半分に並べる」を選択する.

感想

実際にやってみたところ,3DS の裸眼立体視と全く変わらない感覚で,見た目的には全く違和感なく遊べた.しかも 3DS 画面がそのまま 20インチくらいに拡大されて眼の前にある感じで,むしろ実機よりも見やすい感じ.

ただし,PC の画面をキャプチャ→エンコード→PICO4 に送信,しているので多少ラグがあるため,フレーム回避は非常に厳しい.有料の Virtual Desktop だと遅延が少ないらしいので,そっちだとマシなんかな?

まぁ,現状では裸眼立体視を再び体験できて懐かしい,くらいの意味しかなかったw