2016-06-21 10 views
1

スケジュールを最適化することが急で汚いです。例:私は練習できる7つの曲があります。私は合計30分の練習時間を持っています。そして私はそれを5分の窓に分けることができます。だから私は30分、または5つのそれぞれのための6つの異なる曲、または1つの25分、1つの5分など1曲を練習することができます。これとは別に、私はユーティリティ機能を持っており、最適な構成を計算することができます。置換と制約の問題を解決する

私は様々な練習問題のすべてを生成する必要があります。私は前にこのようなことをしていました。 "アルゴリズム"は反抗していました - 私は[0,5,10,15,20,25,30]^7のすべての可能な組み合わせを生成していませんでした合計で30まで。

グロス、愚かな方法、私は知っています。私はこの問題が数学的に何であるのかを見極めようとしてきましたが、Pythonでそれを解決するための効率的なアルゴリズムを見つけることができます。ああ、私はそれを見つけるために十分にGoogleにこれを記述することはできません。

誰もこの問題のクラスまたは適切なアルゴリズムを解決するために助言できますか?

================

私は問題を説明するお粗末な仕事をしてくれました。もう一度試してみましょう:

私の音楽を練習するのに30分のウィンドウが1つあります。 私は30分のウィンドウの中で練習できる7つの異なる曲を持っています。 7曲のそれぞれについて、0,5,10、..、25,30分の間練習することができますが、すべての曲の合計練習時間は30分でなければなりません。 私は、異なる可能な練習スケジュールを採点するいくつかのユーティリティ機能を持っています。

+0

http://meta.stackoverflow.com/q/326413/3001761 – jonrsharpe

答えて

0

編集:ガッサが指摘したように、ここでは問題はないようです。私は今、質問を理解してるのであれば、あなたはitertools.combinations_with_replacement([1,2,3,4,5,6,7], r=6)

古い答えたい:あなたが探しているものを

をある長さ6の(置換した)の順列の全て[1,2,3 、4,5,6,7](あなたの曲の配列)。合計で、7^6 = 117649でなければなりません。 this answerに記載の方法を使用する:

import itertools 
x = [1,2,3,4,5,6,7] 
print len([p for p in itertools.product(x, repeat=6)]) 
# prints 117649 

これは、すべての可能性のスケジューリングあなたに与えます - 彼らはあなたが説明したものとは異なる形式にしている(つまり、あなたが歌1の10分」に「123123」を変換する必要があり、 10分の曲2、10分の曲3 ")が、変換は速い。

+1

このメソッドは別のオブジェクトを生成するので、OPの意味で複数のスケジュールを複数生成します。たとえば、 "123123"と "123231"の両方が、OPのビューで同じ「10分の曲1,10分の曲2,10分の曲3」に変換されます。 – Gassa

+0

@Gregお詫び申し上げます、私は問題を説明してくそった仕事をしました。質問の本文に、より明確な説明が追加されました。 – user3556757

+1

私の回答は役に立ちますか?そして、あなたのユーティリティ機能があなたの曲を練習する順番にも依存するのか、各曲が練習されている時間だけに依存するのか、まだ完全にはっきりしていません。 – Greg

関連する問題