Impossible Machines: 物理世界のための宣言的プログラミングプロトタイプ(Show HN)
Impossible Machinesは、物理世界に宣言的プログラミングを適用するブラウザプロトタイプです。ユーザーはメカニズムが生成すべき動作を記述し、システムはそれを生成するメカニズムを生成します。これは@bhaprayanによってShow HN投稿としてHacker Newsに提出され、このページがスクレイピングされた時点で36ポイントと9コメントに達しました。
Impossible Machinesが実際に行うこと
Impossible Machinesは、望ましい物理的結果が最初に指定され、そこから機械設計が導出されるデザインキャンバスです。プロトタイプ自身の説明は、その前提を直接述べています:
物理世界における宣言的プログラミングがどのように見えるかのプロトタイプ。システムに望むことを示すと、メカニズムが現れるのを見てください。シンクを動かし、障害物を置き、形を変えてください。世界を、あるがままではなく、望むように記述してください。
同じページは、この作品を「@bhaprayanによる思考実験」としています。
世界の語彙:ソース、モディファイア、障害物、シンク、ターゲット
インターフェースは、コードエディタではなく、パーツとターゲットの語彙を公開しています。スクレイピングされたページスナップショットに表示されるラベルは以下の通りです:
- ソースと可動部品: クランク、ウェイト
- モディファイアと制約: ブロック、ブレーキ、ガイド
- 環境: 障害物、シンク
- ターゲット: ベル、ドア
望ましい動作は、ターゲットオブジェクトを選択し、それに何をするかを指示することで宣言されます。ページはユーザーに「ベルをタップして、何をさせたいかを示してください」と指示し、「ベルを鳴らす」を選択可能な目標として提供します。目標が設定されると、ページは「作業中のデザイン」と「他のデザイン」の下に代替案を提示します。
これがプロトタイプの核となる観察可能な動作です:ユーザーはオブジェクトに意図を設定し、その意図を満たすために複数の候補メカニズムが提供されます。スクレイピングされたページは各パーツのセマンティクスを文書化していないため、クランクとウェイト、またはガイドとブロックの正確な役割は、利用可能なソース資料では指定されていません。
チャレンジとフリーフォームベンチ
Impossible Machinesには、3つの名前付きチャレンジとオープンなサンドボックスが付属しています。チャレンジは以下の通りです:
- 迂回を作る
- ブレーキを打ち負かす
- ガイド付きターン
それらに加えて、チャレンジ目標なしで構築するための「フリーフォームベンチ」があります。チャレンジの枠組みは、システムがプロフェッショナルなCADツールではなく、探索可能なパズルスペースとして位置付けられていることを示唆しています:各チャレンジは、ユーザーが目標を記述し、生成されたデザインを受け入れるか拒否することによって達成しなければならない特定のメカニズム動作を分離します。
インターフェースは横向きを要求します
サイトは制限付きで縦向きにレンダリングされます。その向きの通知は次のように述べています:
Impossible Machinesは、メカニズムを探索する余地がある横向きで最適に動作します。
「縦向きで続行」オプションが提供されており、レイアウトは、メカニズムパーツ、障害物、シンクを並べて配置して検査できる広いキャンバスの周りに設計されています。
「宣言的」が興味深い主張である理由
宣言的プログラミングとは、ユーザーが何を真にすべきかを述べ、それを真にする方法を述べないことを意味します。Impossible Machinesはその枠組みを可動部品に適用します:リンケージを手で所定の位置にドラッグする代わりに、ユーザーは結果(ベルを鳴らす、シンクに到達する、障害物を避ける)を宣言し、その結果は機械的な配置に変換されます。
スクレイピングされたページは基礎となる方法を説明しておらず、スクレイピング時点でHacker Newsスレッドに技術的な記事へのリンクはありませんでした。観察可能なのは、ツールが主要な「作業中のデザイン」と追加の「他のデザイン」を提示することであり、これはパズルごとに単一のハードコードされたソリューションではなく、候補メカニズムの検索と一致しています。この区別は、プロトタイプを評価する人にとって重要です。なぜなら、複数の有効なデザインを生成することは、1つを解くことよりもはるかに難しい問題だからです。
Hacker Newsのコメント投稿者が比較したもの
スレッドの最も実質的な貢献は、プロトタイプを以前の研究の系譜に位置付けたことでした。コメント投稿者は3つの参照点を特定しました。
The Incredible Machine。 コメント投稿者@pshcは、最も短くて最も認識しやすい比較をしました:
The Incredible Machineの雰囲気。
The Incredible Machineは、プレイヤーがパーツからルーブ・ゴールドバーグ風の仕掛けを組み立てる1990年代のパズルシリーズでした。この比較は、Impossible Machinesを逆の提案として位置付けます:マシンを組み立てて何が起こるかを見る代わりに、結果を述べるとマシンがあなたのために組み立てられます。
Disney Researchのリンケージ合成。 コメント投稿者@mcphageは、描かれたパスをトレースするリンケージを生成する学術研究を指摘しました:
Disneyの研究ラボは、数年前にポイントをパスに沿って移動させるためにこれに似たことをしました。パスを描くと、そのパスにできるだけ近づけるために必要なリンケージを生成します。それ以来多くのフォローアップ作業がありますが、このビデオを覚えています:https://youtu.be/DfznnKUwywQ?si=F-5NZxKu4hP_mand
これはスレッドで提起された最も近い技術的先例です。ターゲットパスを描き、それを近似するリンケージをシステムに解かせることは、Impossible Machinesがベルを鳴らすことやシンクに到達するという目標に適用する設計ワークフローの逆転と同じであり、@mcphageはその作業が続いていることに言及しています。
Microsoft Researchのモーション研究。 コメント投稿者@jdw64は、Microsoft Researchの出版物を引用し、彼らに影響を与えた過去のプロジェクトが「同様の実装も持っていた」と書き、URLが「motion-」で始まるMicrosoft Researchの出版物ページにリンクしました。スクレイピングされたコメントのURLは切り詰められていたため、特定の論文は利用可能なソースから確認できません。
全体として、スレッドの立場は、宣言的または逆メカニズム設計は新しい研究ではないが、ブラウザベースで即座にプレイ可能なプレゼンテーションがこのプロトタイプを際立たせているというものです。
最も強力な具体的機能リクエスト:時間経過にわたる動作
最も実行可能な批判は@skinfaxiから来ました。彼は現在のワールドモデルが瞬間的で二値的な目標のみをサポートしていると観察しました:
これはクールです!世界の言語を拡張するのは面白いと思います。今のところ、ベルやドアとの相互作用は限られています(基本的に二値的)。二値的でも、ベルを3回鳴らすとか、シェービングとヘアカットを演奏すると言って、その周波数を生成できる機械装置が作成されるとクールです(例えば、単純なものはベルを鳴らすために1回おきにスキップすることです)。それは世界/オブジェクトが何らかの記録期間にわたる相互作用を考慮する必要があると思います。
これは表面的なリクエストではなく、意味のあるアーキテクチャ上のポイントです。「ベルを鳴らす」のような目標は終端状態です:メカニズムはそれに到達するか、しないかのどちらかです。「ベルを3回鳴らす」のような目標は時間的なシーケンスであり、それを満たすには、単一の終了状態ではなく、記録ウィンドウにわたる相互作用の履歴をシステムが推論する必要があります。@skinfaxiが指摘するように、交互に鳴らすための例の解決策(1回おきにゲートする)は機械的に単純ですが、目標自体を表現するには、ワールドモデルが時間を第一級の次元として表現する必要があります。
言い換えれば、現在のプロトタイプの宣言的言語は、物事がどこで終わるべきかをカバーしています。時間の経過とともに物事がどのように展開するかをカバーするように拡張することは自然な次のステップであり、システムが検索できるメカニズムの種類を変えるでしょう。
スレッドで提起された未解決の質問
実装の詳細は開示されていませんでした。 スレッドの最上位の質問は@donalddominkoから来ました。彼はデモをプレイし、ソースを求めました:
これは実際にあなたが持っていた非常に興味深いアイデアです。デモを見て、それをプレイしました。リポジトリへのリンクを探しています - システムが結果を達成する方法を実装した方法を知りたいです。
スクレイピングされたスレッドにはリポジトリリンクは表示されておらず、著者からの返信もコメントセットにはありません。
エンゲージメントシグナルは薄かった。 投稿は36ポイントと9コメントに達しましたが、スクレイピングされたスレッドのすべての表示可能なコメントはスコア0を持ち、1つのコメントはフラグが立てられて表示されませんでした。したがって、スレッドは、情報に基づいた比較の小さなセットと1つの強い機能リクエストとして読むのが最適であり、広範なコンセンサスではありません。
結論
Impossible Machinesは、特定の質問を投げかけるプロトタイプです:世界をあるがままではなく、望むように記述した場合、物理メカニズムのプログラミング言語はどのように見えるでしょうか?その答えは、ソース、モディファイア、障害物、シンク、ターゲットのキャンバスであり、結果(例えば、ベルに鳴らすように指示する)を選択すると、作業中のデザインと代替案が返されます。Hacker Newsのコメント投稿者は、The Incredible MachineからDisney Researchのパス追従リンケージ合成まで続く系譜にそれを位置付け、最も鋭い批判は、その言語が現在終了状態を処理するがシーケンスは処理しないため、「ベルを3回鳴らす」のような目標はワールドモデルが表現できる範囲外であるということです。