2016-08-30 11 views
2

私は変数に束縛された制約を持っています。この拘束空間を効率的にサンプリングする方法を探しています。私はZ3を試してみたところ、空間が些細なものかどうか(すなわち制約が充足可能かどうか)を教えてくれるようだが、何かを最小化または最大化しない限り、空間からの例を得る方法は見当たらない。Z3を使って拘束空間からサンプルする

私は何かが不足していますか、これはZ3が何であるかではありませんか?

答えて

2

Z3では、制約を満たす変数への代入の1つの例が得られます(.NET APIのSMT2またはSolver.Model(get-model)コマンドを試してください(他のAPIでも同様です)) 。次に、モデルの否定をアサートして、ソルバーに次のクエリの別の割り当てを強制的に実行させることができます。この種のスキームは多くのアプリケーションで使用されていますが、必ずしも「効率的」というわけではありませんが、実際にどのようなサンプリングを行っているかによって異なります(たとえば、Z3モデルは検索スペースにランダムには分散しません)。

+0

はい、ランダムサンプリングを探していました。私は他の何かを使わなければならないでしょう。助言がありますか? – syzygy

+0

ユークリッド距離に関する戦略を使用することを考えていました。最初の点を生成した後、定数と既存のソリューションとの距離を最大にするよう最適化を開始します。私はhttps://www.github.com/groostav/sojourn-cvgのjavaスタックでこれを行うことを望んでいます。問題は言葉遣いです:SMT2のlispのようなものは、Java APIよりもずっと素晴らしいです。私はそれをナビゲートするのが難しいです。その結果は遅くなるかもしれませんが、私は実現可能な地域の周りに一種の完全な因子バウンディングボックスを作りたいと思っています。一様な分布ではありませんが、私には十分です。 – Groostav

関連する問題