2009-04-29 12 views
0

私はVB.NETを使用していますが、私はいくつかのアルゴリズムやいくつかの擬似コード、または次のことを可能にするいくつかのVB.NETコードを考え出しています(うまくいけば、 :時間のナップザックアルゴリズム

私は2つのコレクションオブジェクトCob1とCob2を持っています。これらのコレクションオブジェクトには、ICobというインターフェイスを実装するオブジェクトが格納されます。 ICobには3つのプロパティがあります。 boolean IsSelectedプロパティ、Lengthというプロパティ、TimeSpanを返すプロパティ、およびShortプロパティであるRatingプロパティ。

これで、Cob1には約100個のオブジェクトがコレクションに格納され、Cob2は空のコレクションになりました。私がしたいことは、Cob1からオブジェクトを選択し、Cob2にコピーすることです。でも、私は、オブジェクトを選択する際に従う次のルールをしたい:

  1. 私は時間枠を指定できるようにしたいと私は十分なオブジェクトが、私は(Lengthプロパティに基づいて)指定したタイムスパンに適合するように選択することにしたいです。例えば、私が10分の時間を関数に渡すと、10分のウィンドウ全体を満たす十分なオブジェクトを選択するか、できるだけそれを埋めるようになるはずです。

  2. オブジェクトを2回選択する必要はありません。

  3. より高いレーティング(レーティングプロパティを介して)を持つオブジェクトは、他のオブジェクトを選択するより良い機会を持つべきです。

  4. 評価に関係なく、最後の30分以内に選択されたオブジェクトは、再度選択しないでください(各オブジェクトは最終的に少なくとも1回選択されます)。

誰でも私にこれを達成するためのヒントを教えてもらえますか?ヒントは、メンタルプロセス、VB.NETのサンプルコード、擬似コード、または私を助けるかもしれない他の何かのフォームにすることができます。

おかげ

編集:私は、私は現実の生活の中で何をしようとしている明らかにした場合

たぶんそれはすべての人に役立つだろう。

私はラジオ局用のソフトウェアを作成しています。このラジオ局は、コンピュータ化されたプログラムマネージャーのように、再生する音楽と広告を自動的に選択します。

長さはサウンドバイト(曲または広告のいずれか)の長さを表し、評価はそれだけです。歌が普及すれば、それはより多くの放送時間を得る。広告主がより多くのお金を払うと、より多くの報酬を得ることができます。

私のプログラムでは20分ほどの曲を選んで、約5分ほど再生する広告を選んでください。

これはほんの少し役に立ちます。

皆様からのご意見ありがとうございます!

アラン

答えて

4

なお:

制限1は2

制限3はむしろ曖昧である制限の要求に応じて、セット上で動作古典knapsack problem、からです。寿命のより高い価値またはより高い適用範囲を持つ方が良いでしょうか?最大化する目的関数を指定しない場合(または、正確には、寿命と速度の2つがある場合)、パレート最適解がいくつかあります。

制限4は、マップオブジェクト - >前回選択されたものをブラックリストの形で作成することによって実現可能です。

短いストーリー:まず、オブジェクトを制限4でブラックリストに載せてフィルタリングし、次にナップザックアルゴリズムを適用します。

0

4を実現するために、私はあなたがコブが最後に選択された日付/時間を節約する必要があります信じています。それから、私は次のステップでそれをやります:

  1. 最後の30分以内に選択されていないものを除外します。

  2. 評価で並べ替え、リストの最初の項目にカーソルを合わせます。

  3. アイテムのタイムパンを確認してください。指定された時間内に収まるくらい短い場合は、それを選択します。そうでない場合は、3に進み、次の項目に進みます。

  4. あなたのタイムスパンが満たされているかどうかを確認してください。はいの場合は、完了です。いいえの場合は、3に進み、次の項目に進みます。