Show HN:ソコバンAIソルバー

2026/08/17 22:07

Show HN:ソコバンAIソルバー

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

このテキストは、1980 年代のパズルゲーム「ソコバン」の高度な Web ベース版について説明しています。目的は全ての箱をゴールマスへ押すことですが、このバリエーションにのみ特徴的に、プレイヤー(「キーパー」と呼ばれる)も指定されたゴールへと導くことです。操作には矢印キー、WASD キー、または画面上のパッドを使用できます。主な目標は可能な限り少ない移動数で勝利することです。

標準的なゲームプレイとは異なり、このシステムは高度な探索アルゴリズムを採用することで、証明可能に最適な解を保証します。それは、Move-optimal マクロ・プッシュ A* に基づくネイティブ C++ ソルバーの純粋な JavaScript ポートを利用しています。大半のレベル(ボード 1–14)でほぼ瞬時のパフォーマンスを実現するために、ソフトウェアはメモリエフィシエンスを高めるために緊密なビットマスク状態、割り当てフリーのハッシュテーブル、ならびにダイアルバケットキューのような専用データ構造を採用しています。さらに、静的デッドマステーブルと壁を考慮したプッシュ距離の下限値を用いて行き止まりを検出することで速度を最適化しています。

ただしボード 15(8 箱の迷路)については重要な例外があります。ライブのブラウザ内での探索を行う場合、約 4900 万の状態を調査し、1 GB を超えるメモリを使用することになり、単一のブラウザタブの限界を超えるためです。したがって、レベル 1 から 14 までは動的に計算されますが、ボード 15 の最適な解(184 の移動が必要)は、オフラインで複数コアを使用するネイティブ C++並列 A*探索により計算され、ページにハードコーディングされています。このアプローチによって、すべてのレベルで検証済みの移動最適解を即座に体験できるようになります。

本文

ソコバナン(倉庫番)とは?ルールと AI ソルバーの仕組み

ゲームの概要

  • 登場: 1980 年代に登場したパズルゲームです。
  • 役割: プレイヤーは**「キープラー」**となり、すべての箱をゴールのマスへ押し込みます。
  • ゴール状態:
    • すべての箱とキープラーがゴールのマス上に位置します。
    • 重要: 盤面のゴール数は箱の数より1 つ多く設定されており、最後のゴールはプレイヤー自身(キープラー)が占めるためのものです。

ルールと操作方法

  • 移動方法:
    • 上・下・左・右のいずれか 1 マスずつ移動します。
    • 矢印キー、または
      W A S D
      キー、または画面内のパッドを使用します。
  • 箱の押し方:
    • 壁や箱の上には移動できません。
    • 前方(押し込む方向)のマスの裏側が空欄またはゴールであれば、隣にある1 つの箱だけを押すことができます。
    • ステップあたり最大 1 つの箱しか動かすことはできません。
    • ゴールから箱を再度押し出しても構いません(スペース確保用)。
  • 機能:
    • やり直し
      :操作を巻き戻します。
    • リセット
      :盤面を初期状態に戻します。
  • 目的: 全ての物体がゴールに到達した最短の手数でクリアすることです。
    • 一部の盤面については最出手順が既知であり、**「Optimal(最適)」**として表示されています。

AI ソルバーの仕組み

このゲームは A* 探索問題ですが、箱が多い場合は計算量が爆発します。ここでは、私が作成したネイティブ C++ の最入手順ソルバーを JavaScript に移植したシステムを使用しています。単なる解法ではなく、証明可能な**「最少数の手順」**を提供します。

技術的特徴

  1. 移動最優のマクロな箱押し A*

    • エッジ(遷移)を「1 つの箱を全体で押す操作」として定義します。
    • コストは「キープラーが最短ルートで行く歩数」+「押し込みの 1 回」で計算されます。
    • これにより、個々の歩くステップをスキップしつつ、合計コストが真の最少数になるように処理します。
  2. 緊密なビットマスクによる状態表現

    • 箱は到達可能な「生きているマス」に詰め込み、32 ビットの整数として扱います。
    • キープラーの状態も 1 つの番号で表されるため、約 1 KB のオブジェクトを単一の文字コード(バイト)で表現できます。
    • これにより、数百兆個の状態でも数十 MBのメモリで処理可能です。
  3. ダイヤル型バケットキューとオープンアドレス法のハッシュテーブル

    • A* のフロンティアはコストでソートされたバケットキューを使用します。
    • 既訪問済みセットや親ノードリンクは、メモリの割り当てを行わずキャッシュ効率が高いフラットな配列型ハッシュテーブルとして管理します。
  4. デッドロックの剪定

    • ゴールから逆方向に到達可能かを示す「死んだマス表」と、動きが止まるかチェックする機構により、解けない位置を早期に排除します。
    • 壁を考慮した押し込み距離の下界評価を導入し、探索効率を高めると同時に最良の解を保証しています。

パン面の分類と検証状況

盤面 1〜14:リアルタイム最適解

  • これらの盤面は、ミリ秒単位でリアルタイムに最適解を検出します。
  • 「Optimal」と表示されている手数は、このソルバーが返す正確な値です。

盤面 15:8 つの箱を含む迷路

  • 完全探索の限界:
    • 状態数約4900 万
    • メモリ使用量1 GB を超えるため、ブラウザ内でリアルタイム計算は困難です。
  • 検証方法:
    • 最適解(184 手順)は、ネイティブ C++ ビルド版をオフラインで計算・検証済みです。
    • 並列 A* 探索(24 コア使用)で約5 秒の時間で算出されています。
  • 表示について:
    • ページ上で表示されているのは、あらかじめ計算されたこの解法を順に実行するものであり、リアルタイムな探索ではありません。
    • これが盤面 15 の答えがハードコーディングされている理由です。

このソルバーは「ソコバナン求解器」に基づいて構築されています。詳しくは ソコバナンについての情報 を参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/08/18 2:54

Rust の GPU オフロード:ポータブルで安全かつ高速

## 日本語の翻訳: 要約: 最も重要な進歩は、Rust および LLVM に組み込まれた新しいゼロオーバーヘッド GPU コンパイルフレームワークであり、これは高実行速度とメモリー安全性という歴史的なトレードオフを成功裏に解消します。従来、開発者は効率性のために不安全な生ポインタを選択するか、NVIDIA や AMD などの単一ハードウェアプロバイダーに縛られるベンダー固有の言語に依存する别无選択でした。この解決策は、Rust の厳格な型システムと所有権規則を活用してデータ転送を安全に管理し、LLVM のオフロードインフラストラクチャおよび専門的な 2 パスコンパイルパイプラインを利用することで、複雑なメモリー移動やクロスベンダー間フェースの不整合を自動的に処理することにより、このジレンマを解消します。その結果、ユーザーは現在、危険な unsafe ブロックを使用せずに、またはプロプライエタリなドメイン固有言語に依存せずに、高パフォーマンスの GPU コードを書くことができます。RAJAPerf ベンチマークでの初期評価では、システムが GPU カーネルに対して競合する中間コードを生成しており、これによりネイティブで手動最適化された C++ ソリューションと同等かそれ以上の性能を発揮できる可能性があります。この統一アプローチにより、企業はデータ転送を最適化しながらも、セキュリティと異なるハードウェアベンダーへの移植性を維持することが可能になります。

2026/08/17 22:46

DuckDB v2.0 のプレビュー

## Japanese Translation: DuckDB v2.0、コードネーム「Cyanoptera」は、単独の分析ツールから、複雑なトランザクションワークロードを処理できる堅牢なマルチテナントサーバープラットフォームへの中道的変化を象徴しています。この大規模なアップグレードでは、`quack` エクステンションによるネイティブクライアント/サーバーアーキテクチャ、同時操作時のデータ完全性を確保するためのフル MVCC サポート、および従来のエンジンに代わるモダンな PEG ベースのパーサーを中心とした破壊的変更が導入されました。優れたパフォーマンスを実現するために、このリリースは遠隔接続を高速化するための非同期 I/O および、ファイル全体をスキャンせずともデータインデックスへの即座アクセスを可能にするストレージ v2.0 のような最適化されたストレージフォーマットを採用しています。技術的には、タイムゾーン論理をコアシステムに埋め込み、ICU などの外部ライブラリへの依存を排除し、宣言的な YAML 仕様から生成される安定した C API を導入しました。ユーザーはバッファー管理を必要とする新しいデフォルトストレージ方式への適応が求められますが、その対価は大きいです:組織は、PostgreSQL などの多様なデータベースに対してプッシュダウン最適化を適用した統合リモートクエリを実行でき、信頼できるローカルエクステンションリポジトリによる強化されたセキュリティを楽しむことができ、SQL レベルのトリガーや `VARIANT` タイプ、ベクトル検索機能など高度な機能を活用できるようになりました。

2026/08/17 23:18

生成 AI を使用した GitHub Copilot の「自動修正」機能で、Snowflake の Jira が侵害された件

## 日本語翻訳: # ルール - 元の意味を正確に保ってください(追加・省略なし)。 - 文書構造(見出し、箇条書きなど)を維持してください。 - 技術用語は正確に保ってください(API、LLM、zero-trust は自然な日本語がある場合を除いてそのまま使用)。 - トーンと確信度を維持してください。 - まとめ、説明、改変を行わないでください — 翻訳のみを実行してください。 # 出力形式 ## 日本語翻訳: (ここに日本語翻訳を記述します) ## 翻訳対象のテキスト: 改善は不要です — このサマリーは、推論や曖昧さを加えずにすべての主要点を正確かつ明確に反映しています。