タグ付けされた質問 「heuristics」

3
アイテムの配送用の3Dパッキングアルゴリズム
可能な限り少ない箱に商品を収納するための最良の方法を提案する配送見積もりを作成するタスクを受け取りました。 既知の長方形のボックスサイズには有限のセットがあります 箱の中に詰められる多くの任意の長方形のアイテムがあります 少ないボックスが最適に使用されるべきです。2つの箱1x1x1を出荷するのは、1つの箱1x2x1よりもはるかに高価だからです。ここが優先事項です。 また、第2レベルの優先度として、できるだけ小さなボックスを使用するように最適化する必要があります。(例:1つの大きな箱と2つの小さな箱から選択できる場合、大きな箱を選択する必要があります) アイテムはボックスに収まるように回転できますが、回転は少なくとも45°の増分に制限する必要があります(私の研究では、一部の構成では、より大きな四角形のボックス内に四角形のボックスをより適切に収めることができるようです) 、90°回転であることが標準です。 ボックスには重量制限があり、アイテムには任意の重量があります(例:サイズが1x1x1のアイテムは、他の2x2x2アイテムよりも重いことがあります) 私は少し調べて、ビンのパッキングとナップザックの問題に関するいくつかの抽象化アルゴリズムを見つけましたが、次のやや強引なバリエーションがあり、最適なアルゴリズムに似ています。 「梱包するアイテム」リストで、アイテムを減少したボリューム順(大きい方)に並べ替えます このリストの各アイテムについて: 「使用済みボックス」リストにある小さなアイテムを選択し、アイテムに合うのに十分な残りの容量と重量の制限があります(寸法と重量を合わせるためにここでフィットを使用します) そのようなボックスがない場合、可能なボックスサイズの既知のセットから新しいアイテムを作成します。これは、アイテムの寸法と重量に適合する最小サイズで、「使用済みボックス」のリストに追加します。 ボックスがアイテムにフィットする場合(以下のフィット関数を使用)、「このボックスのアイテム」のリストに追加し、「フィットするアイテム」リストから削除して、ボックス内の相対的な3D位置をマークします。 「梱包するアイテム」リストに適合するアイテムがなくなるまで、2.1から繰り返します。 上記の手順2で使用されるフィッティングチェック関数: ボックスの残りのボリュームがアイテムのボリュームに収まるかどうかを確認します。そうでない場合は、falseを返します。 「箱のアイテム」の重量と現在のアイテムの重量の合計が箱の重量制限以下かどうかを確認します。そうでない場合は、falseを返します。 「ボックスのアイテム」リストをチェックして、Yコンポーネントが最小で、アイテムの幅、奥行き、高さに十分なスペースがある最初のボックス座標を選択します。 アイテムが現在の向きに収まらない場合は、単純化のために45°の回転を想定せずに、6つの可能な回転のいずれかで回転します。(すでにテストされているサイズをスキップできる回転。例えば、ボックスを180°回転させると、すべてのボックスとアイテムが反対面で同じサイズになるためスキップできるため、元の位置と同じ寸法になります。) アイテムがすべての可能な方法で元の方向に戻されていない場合は、手順3からやり直してください。 すべての回転が試行され、フィットが見つからなかった場合、現在の座標を利用できないスペースと見なします。 使用可能なスペースがない場合は、falseを返します。そうでない場合は、ステップ3から再試行してください。 提示された制約が与えられた場合、私の問題に対する最善の解決策があるかどうかを知りたいです。 これは理論上はうまくいくようですが、コードでは試していません。私は正しい方向に進んでいるか、これを行うより良い、パフォーマンスの良い方法があるかどうかを知りたいです。 参照は素晴らしいでしょう。 編集: 必要なことを行う興味深いサードパーティAPIをいくつか見つけましたが、これは切断する必要があるため、これらにアクセスすることはできません。 以下に例を示します。 http://v2.3dbinpacking.com/demo/main http://www.packit4me.com/api 編集2: 解決すべき問題の実例は次のとおりです。 私は4つのボックスサイズWxHxDを持っています:10x12x18、12x16x24、16x20x30、24x32x40 私はサイズが6x8x10、2x 22x14x30、1x 22x4x20の4つのアイテムを注文しています このアイテムを可能な限り少ないボックスを使用して、可能な限り小さいボックスを使用し、可能な限り少ない空きスペースを残して、1つ以上のサイズの任意の量のボックスに収めるにはどうすればよいですか?

8
一括操作を実装する必要がある場合、ORMフレームワークを放棄する必要がありますか?
一般的な状況は次のとおりです。 ORMフレームワークを使用するアプリケーションに一括操作を実装する必要があります。 最初のパスの後、重大なパフォーマンスの問題に気づきました。 ここに私の質問があります: この状況では、生のSQLを含むソリューションを好むべきでしょうか? または、ORMフレームワークを使用した一括操作に一般的に関連する問題を軽減するのに役立つ、よく知られた設計パターンはありますか? 編集: アプリケーション全体からORMフレームワークを削除する必要があるかどうかは尋ねません。 私は尋ねています:アプリケーションのこの小さなスライスのためにORMフレームワークを放棄する必要がありますか?
15 orm  heuristics 

1
柔軟なDIFF実装のための発見的アプローチ
作業中のドキュメントリビジョンを比較するために、DIFF実装を作成しました。O(ND)差分アルゴリズムとそのバリエーションに基づいています。 重要になった1つのことは、変更のリストを取得し、それらを人間が読めるテキストに変換することです。現在のアルゴリズムは非常に効率的ですが、拡張するのが難しいほど非常に効率的です。 短い質問 私はA *と「ターン」にペナルティを追加するヒューリスティックを使用しようと考えていました。アイデアはしている滑らか人間が読むことができる何かに解析することが容易であるように「削除、追加、追加、削除、追加、削除」不要に。基本的に、私の最短経路問題を最も単純な経路問題に変えてください。 そしてもちろん、常に出力作成「削除しないすべてのものを、追加のすべてを」 これは理にかなっていますか? DIFF実装でヒューリスティックを使用するための優先順位はありますか?ヒューリスティックとは何ですか? 問題: 長い文が削除され、別の長い文が削除されたが、少なくとも1つの単語を共有している場合、「with」と言います。一般的な単語を単独で(追加と削除の両方ではなく)残すと、最短パスが作成されます。ただし、これは実際に、変更から印刷物を読み取ろうとする人間に対する変更のコンテキストを難読化するだけです。 現在のDIFFの例: 古いテキスト: クリーン:ショップエアでパワーウォッシュとブロードライ。 新しいテキスト: クリーニング:アセトンと糸くずの出ない布で拭きます。 メモリストの変更: 「Powerwash and blow dry」を「アセトンで拭く」に変更します 「ショップエア」を「アセトンと糸くずの出ない布」に変更します 注:「「ショップエア」の削除、「アセトン」の追加」の代わりに「変更」が使用されます。 ご覧のとおり、2番目のノートはすべてのコンテキストを失い、テキストの完全な古いテキストセットと新しいテキストセットを見ることなく、その意味を理解できません。 句読点に関する注意: 句読点を別の「単語」として区切り、次のようにします 追加 "(" の代わりに 「修復」を「(修復)」に変更します これは不快だったからです。ただし、これは、両方のテキストにコンマさえある場合(前の例の "with"という単語とは対照的に)、同じことが起こることを意味します。 可能な解決策: 代わりに、異なるパス検索アルゴリズムを使用して、人にとってより意味のある異なる変更「パス」に重みを追加する柔軟性を与えることができると思います。たぶん、句読点を含むノードへの移動にほとんど重みを付けないようにすることもできます(これが他のものにどのように影響するかはわかりません)。 次に、前の例を取得して以下をリストできます。 メモリストの変更: 「パワーウォッシュとショップエアでブロードライ」を「アセトンと糸くずの出ない布で拭いてください」に変更します。 見る!より明確に! パフォーマンスに打撃を与えることはわかっているので、プログラムの大幅なオーバーホールを行う必要があるかもしれませんが、最終結果を得ることがより重要です。 ボトムライン: 繰り返しますが、DIFF実装でヒューリスティックを使用するための優先順位はありますか? 他の考え?合理的な時間投資ですか?他のアイデア?他のアルゴリズム? 前もって感謝します! 編集: A *を使用するのではなく、質問を明確化/固化し、質問をアルゴリズムにヒューリスティックを追加するように一般化しようとしました。この例では基本的に同じことですが、今でもより正確だと思います。 この投稿は洞察に富んでいました。

2
ヒューリスティックアルゴリズムを単体テストするにはどうすればよいですか?
ルート検索アルゴリズムがあるとします。 def myHeuristicTSP(graph): /*implementation*/ return route これをユニットテストしたいと思います: class TestMyHeuristicTSP: def testNullGraphRaiseValueError(self): self.assertRaises(ValueError, myHueristicTSP(None)) def testSimpleTwoNodeGraphReturnsRoute: self.assertEquals(expectedResult, myHeuristicTSP(input)) 問題は、非ヒューリスティックTSPアルゴリズムの場合、さまざまなグラフを提供し、常に絶対最短ルートを返すことを確認できることです。 しかし、ヒューリスティックアルゴリズムはまだ確定的ではありますが、予測可能性が低いため、アルゴリズムがどのように機能するかを理解し、それらのエッジケースを見つけることを単に目的としていますか?

1
完全にソートされていないデータを検索するためのヒューリスティック
ソートされたデータがあれば、検索ソリューションは明白です。並べ替えられていないデータが与えられた場合、適切なオプションは、並べ替えてから検索するか、単なる線形検索です。 この質問は、データがある程度ソートされているが、再編成できない場合の対処方法です(書き込み操作にはセクターの消去が必要であり、セクターがRAMに収まりません)。 詳細: データレコードは、タイムスタンプとともに順次ログに記録されます。ただし、タイムスタンプクロックは、同期される前にしばらくの間エポックにリセットされるか、夏時間調整などにより単純に調整されます。 検索結果は、指定された時刻に最も近いタイムスタンプを持つログレコードである必要があります。特定のタイムスタンプでレコードのバイナリ検索を実行しているときに、不連続なログデータのパッチに到達し、間違った方向にピボットする可能性があります。 ブルート線形法以外に、ここで利用できるヒューリスティックはありますか?例:ローカルミニマの影響を受けないシンプレックス検索? 更新: レコードの約95%がソートされた順序であると想定できます。約5%(ログ全体に分散)は、汚いしゃっくりです。タイムスタンプが時間的に逆戻りし、ログの先頭よりも前のスタンプがある場合、しゃっくりの始まりを識別できます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.