問題タブ [heuristics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1261 参照

algorithm - 有界サブグラフ間の最小カットセットの検索

ゲームマップがサブグラフに分割されている場合、サブグラフ間のエッジを最小限に抑える方法は?

問題があります。パックマンや倉庫番などのグリッド ベースのゲームで A* 検索を実行しようとしていますが、「囲い」を見つける必要があります。エンクロージャーとはどういう意味ですか? ソフト制約として機能する各サブグラフの頂点数の最大サイズと最小サイズが与えられた場合、カット エッジができるだけ少ないサブグラフ。
あるいは、サブグラフ間のブリッジを探していると言うことができますが、一般的には同じ問題です。


グリッドベースのゲームマップの例 http://dl.dropbox.com/u/1029671/map1.jpg

このようなゲームが与えられた場合、私がやりたいことは、エンクロージャーへの入り口を適切に見つけて、これらのエンクロージャー内の頂点に到達するための優れたヒューリスティックを取得できるようにすることです。

代替テキスト http://dl.dropbox.com/u/1029671/map.jpg

だから私が望むのは、特定の地図上でこれらの色付きの領域を見つけることです。


私のモチベーション

単純なマンハッタン距離ヒューリスティックのパフォーマンスに満足するだけでなく、わざわざこれを行う理由は、エンクロージャーヒューリスティックがより最適な結果を与える可能性があり、適切な距離計算を取得するために実際に A* を実行する必要がないためです。また、後で倉庫番タイプのゲームをプレイするときに、これらのエンクロージャー内で対戦相手の競争力のあるブロックを追加することもできます。また、エンクロージャー ヒューリスティックは、ゴール頂点をより適切に見つけるためのミニマックス アプローチにも使用できます。

考えられる解決策

この問題の可能な解決策は、Kernighan Lin アルゴリズムです

このアルゴリズムの私の問題は、O(n^2 * lg(n)) でのランタイムです。A1 と B1 のノードを各サブグラフの境界に制限して、実行される作業量を減らすことを考えています。

また、アルゴリズムの c[a][b] コストも理解していません。a と b の間にエッジがない場合、コストは 0 または無限大であると想定されます。または、ヒューリスティックに基づいてエッジを作成する必要があります。

a と b の間にエッジがない場合、c[a][b] がどうあるべきか知っていますか? 私の問題はマルチレベル法を使用するのに適していると思いますか? なぜですか、そうでないのですか?私の問題に対して kernighan-lin アルゴリズムで行われる作業を減らす方法について良いアイデアはありますか?

0 投票する
1 に答える
84 参照

timezone - 任意の「場所」文字列からタイムゾーンを推測していますか?

スタック オーバーフロー データ ダンプに対していくつかの統計を実行しようとしています。そのために、各ユーザーのタイム ゾーンを知りたいと考えています。ただし、次に進む必要があるのは、完全に自由形式の「場所」文字列だけです。

タイム ゾーンのおおよその値を探しているだけであることを強調しておきます。もちろん、一般的にこれは解決不可能な問題です。ただし、多くの人が国、州、および/または市区町村を記入しており、かなり良い兆候を示しているはずです. 他のケースで失敗しても大丈夫です。信頼できるものである必要はなく、正確である必要も、すべてのベースをカバーする必要もありません。

これについてあまり時間を無駄にしたくないので、合理的な推測を行うことができるコードがそこにあるかどうか疑問に思っています。どの言語、プラットフォーム、API、またはライブラリでも構いません。何か案は?

0 投票する
2 に答える
1124 参照

c# - スレッド管理のアドバイス - TPL は良い考えですか?

正しいルートをたどっているかどうかわからないので、スレッド管理の使用と、できればタスク並列ライブラリーの使用についてアドバイスを得たいと思っています。おそらく最善の方法は、私がやろうとしていることの概要を説明することです。

問題が与えられた場合、ヒューリスティック ベースのアルゴリズムを使用してソリューションを生成する必要があります。基本的なソリューションを計算することから始めます。この操作は並列化できないと思うので、心配する必要はありません。

初期ソリューションが生成されたら、n 個のスレッドをトリガーして、より良いソリューションを見つけようとします。これらのスレッドは、いくつかのことを行う必要があります。

  1. それらは、別の「最適化メトリック」で初期化する必要があります。言い換えれば、コード内に設定された優先レベルで、さまざまなものを最適化しようとしています。これは、それらがすべてわずかに異なる計算エンジンを実行することを意味します。TPLでこれができるかどうかはわかりません..
  2. スレッドの 1 つが、現在最もよく知られている解決策 (すべてのスレッドで共有する必要がある) よりも優れた解決策を見つけた場合、最適な解決策を更新し、他の多くのスレッドを強制的に再起動する必要があります (これも優先レベルによって異なります)。最適化指標の)。
  3. スレッド間で特定の計算を組み合わせたい場合もあります (たとえば、問題への特定のアプローチの確率の結合を維持します)。ただし、これはおそらくよりオプションです。
  4. システム全体は明らかにスレッドセーフである必要があり、可能な限り高速に実行したいと考えています。

自分のスレッドを管理してシャットダウンするなど、かなりの実装を試みましたが、かなり複雑になり始め、TPL の方が優れているのではないかと考えています。誰かが一般的なガイダンスを提供できるかどうか疑問に思っていますか?

ありがとう...

0 投票する
1 に答える
1547 参照

matlab - 決定論的アニーリング コード

決定論的アニーリングのコードのオープン ソースの例を見つけたいと思います。C、C++、MatLab/Octave、Fortran など、ほぼすべての言語で使用できます。シミュレートされたアニーリング用の MatLab コードを既に見つけたので、MatLab が最適です。このアルゴリズムを説明する論文は次のとおりです。

決定論的アニーリングは、コスト関数のグローバルな最小値を見つけようとする最適化手法です。この手法は、ローカル情報を使用して最適化を実行しながら、ランダム性を使用してコスト面の大部分を調査できるように設計されています。この手順は、コスト関数を変更してランダム性の概念を導入することから始まり、広い領域を探索できるようにします。各反復でランダム性の量 (Shannon Entropy [2] で測定) が制限され、局所的な最適化が実行されます。課される乱数の量が徐々に減少し、終了時にアルゴリズムが元のコスト関数を最適化し、元の問題に対する解が得られます。

0 投票する
1 に答える
3173 参照

statistics - ドキュメントを指定して、関連するスニペットを選択します

ここで質問すると、自動検索によって返される質問のツールのヒントは、質問の最初の少しを与えられますが、それらのかなりの割合は、質問を理解するのに役立つテキストを提供していません。タイトル。質問の無駄な部分を取り除くためのフィルターを作成する方法について誰かが考えていますか?

私の最初のアイデアは、一部のリストの単語のみを含む主要な文をトリミングすることです(たとえば、ストップワード、タイトルの単語、およびタグとの相関が非常に弱いSOコーパスの単語、つまり、タグに関係なく、どんな質問でも発生します)

0 投票する
3 に答える
4462 参照

algorithm - ある文字列を別の文字列に変更するための単純な突然変異の数は?

一度に1文字ずつ変えて、有効な英語の単語だけを使って単語を変えようとする「ワードゲーム」を聞いたことがあると思います。私はそれを解決するためにA*アルゴリズムを実装しようとしています(A *の理解を具体化するためだけに)。必要なものの1つは、最小距離のヒューリスティックです。

つまり、任意の文字列aを別の文字列bに変換できるこれら3つの突然変異のうちの1つの最小数:1)1つの文字を別の文字に変更する2)任意の文字の前後の場所に1つの文字を追加する3)任意の文字を削除する

私は多くのアルゴリズムを試しました。毎回実際の答えを出すものが見つからないようです。実際、人間の推論でさえ最良の答えを見つけているかどうかわからないことがあります。

誰かがそのような目的のためのアルゴリズムを知っていますか?または多分私が1つを見つけるのを手伝うことができますか?

(明確にするために、私は、英語の妥当性を無視して、任意の文字列を他の文字列に変換できるアルゴリズムを求めています。)

0 投票する
6 に答える
4895 参照

javascript - readability.js のような Python 用のものはありますか?

Arc90 の readability.js にほぼ相当する Python のパッケージ/モジュール/関数などを探しています

http://lab.arc90.com/experiments/readability

http://lab.arc90.com/experiments/readability/js/readability.js

input.html を与えると、結果はその html ページの「メインテキスト」のクリーンアップされたバージョンになります。サーバー側で使用できるようにこれが必要です (ブラウザー側でのみ実行される JS バージョンとは異なります)。

何か案は?

PS:Rhino + env.jsを試してみましたが、その組み合わせは機能しますが、パフォーマンスは受け入れられず、ほとんどのhtmlコンテンツをクリーンアップするのに数分かかります:((なぜこのような大きなパフォーマンスの違いがあるのか​​ まだわかりませんでした)。

0 投票する
2 に答える
319 参照

genetic-algorithm - ヒューリスティックのバランスをとる (時刻表問題用)

タイムテーブルを生成するための遺伝的アルゴリズムを書いています。

現時点では、次の 2 つのヒューリスティックを使用しています。

  1. 1 日のレクチャー間のホール数 (関連) (ホール数が少ない -> スコアが大きい)
  2. 各時間には何らかの値があるため、時間割ごとに、講義が行われている時間の値を合計します。(より適切な時間に講義 -> より高いスコア)

これら 2 つのヒューリスティックのバランスをとりたいので、アルゴリズムはどちらも優先しません。これを達成するための最良の方法は何ですか?

0 投票する
1 に答える
437 参照

algorithm - 特定の評価に従ってオブジェクトのセットをいくつかのサブセットに分割する

一連のオブジェクトがあるとしますSfセットがその上にS特定のデータ構造を構築する場合、次のアルゴリズムがあります。が大きい場合、および/または非常に異なるオブジェクトが含まれている場合は、大きくなり、使用できなくなります (つまり、割り当てられたメモリに収まりません)。これを克服するために、いくつかの交差しないサブセットに分割し、サブセットごとにビルドします。構造体を使用すると、構造体を使用するよりも効率が低下しますが、少なくともこの方法では、メモリの制約に適合できます。のサイズはそれ自体よりも速く成長するため、 の合計サイズは のサイズよりもはるかに小さくなります。Df(S) = DSDSS = S1 + S2 + ... + SnDinf(S)SDiD

nただし、 を減らすこと、つまりサブセットの数を減らすことは依然として望ましいことです。または の合計サイズを小さくしDiます。このため、それぞれに「類似した」オブジェクトが含まSれるように分割する必要があります。入力オブジェクトが互いに「十分に類似している」場合、より小さな出力構造が生成されるためです。Sif

問題は、 のオブジェクトの「類似性」Sと のサイズがf(S)相関する一方で、 を評価する以外に後者を計算する方法がなく、あまり高速f(S)ではないことです。f

私が現在持っているアルゴリズムは、次の各オブジェクトを からSのいずれかに繰り返し追加するSiことです。これにより、(この段階で)結合Diサイズの増加が最小限に抑えられます。

これにより実用的な結果が得られますが、確かに最適とはかなりかけ離れています (つまり、可能な最小の結合サイズ)。また、これは遅いです。いくらか高速化するために、 がすでに にあるオブジェクトと「十分に類似している」size(f(Si + {x})) - size(f(Si))ものだけを計算します。ixSi

そのような種類の問題に対する標準的なアプローチはありますか?

分枝境界アルゴリズム ファミリについては知っていますが、非常に遅くなるため、ここでは適用できません。私の推測では、合理的な時間内に の最適な分布を計算することは不可能SですSi。しかし、反復的に改善する一般的なアルゴリズムはありますか?

編集:

コメントが指摘したように、私は「類似性」を定義したことはありません。実際、私が望むのはSi、組み合わせたサイズDi = f(Si)が最小または少なくとも十分に小さいサブセットに分割することだけです。「類似度」はこれだけで定義されており、残念ながら簡単に計算することはできません。簡単な概算がありますが、それはあくまでも概算です。

したがって、後者を計算する簡単な方法がないsum f(Si)ことを考慮して最小化する (おそらくヒューリスティックな) アルゴリズムが必要です。良い結果が得られる可能性が非常に低いケースを破棄するために使用する近似値のみです。

0 投票する
9 に答える
1183 参照

c# - Where are strings more useful than a StringBuilder?

Lot of questions has been already asked about the differences between string and string builder and most of the people suggest that string builder is faster than string. I am curious to know if string builder is too good so why string is there? Moreover, can some body give me an example where string will be more usefull than string builder?