様々な図面における同様の参照番号および指定は同様の要素を示す。
本明細書は資源配分のための技術を説明する。これらの技術は一般に、同期座標降下(SCD)を介してスケーラブルな分散型パラダイムで大規模なナップサック問題(KP)を解くことを伴う。いくつかの実施形態では、説明される技法は、2つ以上の全体制約を伴う、数十億以上の規模のKPを解くのを助けることができる。いくつかの実施形態では、説明される技法は、解の最適性を損なうことなく、または制約の要件を妥協することなく、そのような大規模なKPを解くのを助けることができる。いくつかの実施形態では、これらの技術は、既製の分散型コンピューティングフレームワーク(たとえば、MPI、Hadoop、Spark)を用いて実装され得る。いくつかの実施形態では、これらの技術は、メモリ空間を節約し、計算の複雑さを低減しながら、KPの解決速度を改善することができる。いくつかの実施形態では、これらの技術は、これまでにない規模の資源配分問題を解決することができ(たとえば、数十億個の決定および制約変数を伴うKPを数時間以内(たとえば、O(1)時間のオーダー)で解くことができる)、一方で、このような大きな規模でKPを既存の技法が解くことは、計算的に実行不可能であり、または莫大な時間がかかり得る(たとえば、数十億個の決定および制約変数を伴うKPを、数時間または数日以内に既存の技法によって解くことはできない)。
ナップサック問題(KP)は、現実世界の意思決定プロセスにおいて非常に一般的である。KPの例には、いくつか挙げると、資産管理、ポートフォリオ選択、および予算配分がある。たとえば、金融業における資源配分のシナリオでは、決定はしばしばユーザごとに行われるが、ユーザの数は多いことがあり、たとえば10億人のオーダーのアクティブユーザがいることがある。
ある例として、オンラインプラットフォームは、支払から銀行業務、ローン、資産管理、保険などに至る、広範な金融商品およびサービスを、ユーザに提供することができる。様々な金融資源が、毎日ユーザの間に配分され得る。これらの資源には、たとえば、ユーザ/ユーザグループの間で分散されるべき資金予算(たとえば、ローン、マーケティングプロモーション、広告費、資産ポートフォリオ)、または、様々な営業チャネル(たとえば、ANT-CREDIT-PAYとしても知られているHUABEI、ANT-CASH-NOWとしても知られているJIEBEI、ANT-MONEY-MARKET-FUNDとしても知られているYUEBAO)に配分される必要があるユーザトラフィック(たとえば、インプレッション、クリック、滞在時間)などの非金銭的資源があり得る。
マーケティングキャンペーンの場合の予想されるユーザのコンバージョンなどの、共同の目的を最適化しながら、制約の集合を尊重するために、資源配分問題をKPとして表すことができる。いくつかの実施形態では、制約を全体制約および局所制約へと分類することができる。
全体制約は通常、複数のユーザに関わる、全体のレベルでの資源制約を含む。たとえば、マーケティングキャンペーンはしばしば、全体的な予算制限、ならびに、各ユーザコホート(たとえば、性別、土地、またはユーザのライフサイクルの段階)または各商品チャネルに対して利用可能もしくは許容可能な最大の量の資源を有する。
局所制約は、個々のユーザまたはユーザの小さなグループのいずれかだけに有効な制約を含む。本明細書全体で、「ユーザ」および「グループ」という用語は交換可能に使用される。たとえば、ユーザは、1人または複数の個々のユーザを含むユーザグループを含み得る。いくつかの実施形態では、局所制約は本質的に希薄である。いくつかの実施形態では、局所制約は、効率的なソルバを設計するために活用され得る階層構造を示す。
いくつかの実施形態では、10億の規模のKPについて、決定変数と局所制約の両方が、数十億のレベルまたはオーダーにあり(すなわち、桁数がO(109)と表記される9またはそれより上である)、一方で、全体制約のサイズはしばしば小さく、たとえばO(1)〜O(100)のオーダーである(すなわち、桁数が1〜2である)。KPを解決するための既存の最適化手法は、はるかに小さな規模でしか扱いやすくない。
本明細書は、10億の規模の現実世界のKPを解くための技術を説明する。例としてMapReduce計算モデルを使用して、本明細書は、双対問題の分解可能性を活用することによってKPを解くための分散型フレームワークを説明する。ハイパーパラメータの手動の調整が必要であり、制約の違反が生じやすいことにより、うまく機能しない従来の双対降下アルゴリズムの代わりに、本明細書は、これらの問題のない同期座標降下(SCD)アルゴリズムを説明する。
さらに、本明細書は、階層構造を有する制約を受ける整数計画(IP)問題を解くためのソルバを説明する。CPLEXまたはGUROBIなどの既製のIPソルバと異なり、このソルバは、階層構造の制約を受けるIP問題を多項式時間の中で解くことができる貪欲アルゴリズムを使用する。説明されるIPソルバは、階層貪欲IPソルバと呼ばれ得る。階層貪欲IPソルバは、たとえば、局所制約の階層構造を活用することによりKPのIP部分問題を解くことによって、KPを解くための分散型フレームワークにおいて使用され得る。
制御された設定と現実世界の設定の両方で行われたシミュレーション結果は、分散型SCDアルゴリズムがKPをほぼ最適に解くことができ、数十億個の決定変数および制約に対してよくスケーリングできることを示している。その上、分散型の環境においてアルゴリズムをさらに高速化するための技法が説明される。
KPの以下の一般化された変形を考える。
s.t.
ここで、M個の資源(またはアイテム)の集合が、K個の全体制約およびL個の局所制約を尊重して、N人のユーザの集合に配分されることになる。資源jがユーザiのために選ばれる、すなわちx
i,j=1である場合、p
i,jという報酬(利益、効用、または利得とも呼ばれ得る)が得られ、各々のk=1,…,Kに対して、資源の量b
i,j,kが、k番目のナップサックのために消費される。入力パラメータB
kおよびC
lは真に正であり(すなわち、B
k>0かつC
l>0)、一方でp
i,jおよびb
i,j,kは非負である。全体制約(2)は各ナップサックに配分される資源を制限し、一方で局所制約(3)はユーザごとの選択を制約する。一般性を失うことなく、ここで局所制約はユーザごとであり、それは希薄なユーザ集合に対する局所制約が、ユーザごとの制約の集合へ分解され得るからである。
コストテンソルが密になるようにコスト係数ci,j,lに対して0が適切にパディングされる場合、局所制約(3)は消滅し、すべての制約が全体的になる。この意味で、この定式化は、多次元ナップサック問題(MDKP)の一般化された変形である。
この定式化では、二値の決定変数のみが考慮される、すなわちxi,j∈{0,1}であるが、本明細書で説明されるすべての技法が、カテゴリ(すなわち、非負整数の)決定変数に容易に拡張され得ることに留意されたい。説明される技法はカテゴリ変数をサポートする。
本明細書の以後の部分のために以下の追加の表記を定義する。
pi:ユーザiの報酬ベクトル
bi:ユーザiの全体制約係数行列
ci:ユーザiの局所制約係数行列
xi:ユーザiの決定変数ベクトル
x:すべてのユーザ決定変数行列
全体制約の数が局所制約の数よりはるかに少ないと仮定すると、双対乗数(Dual Multiplier)の集合λ={λ
k, k=1,2,…,K}が全体制約に対して導入される。双対問題の変換のためのラグランジアン技法に従うと、xが
を最大化し、かつxおよびλが最適性条件
をともに満たすような、対(x,λ)が探索される。
直観的には、各乗数λk(ラグランジアン乗数、双対ラグランジアン乗数、または単に乗数とも呼ばれる)は、k番目のナップサック資源の潜在価格(または限界効用)として経済的に解釈され得る。
最大化問題(5)〜(7)は、(6)の存在により標準的な0-1のIP問題の定式化とは異なる。しかしながら、それでも最適性条件が当てはまることが示され得る。これを理解するために、局所制約に対して乗数μの追加の集合((6)における各制約に対して1つ)を導入して(x,μ)に対するIPの定式化を一緒に得ることができる。
ラグランジアン乗数λの集合を仮定すると、(5)における最大化問題は、各ユーザiに対して1つの独立の部分問題へと分解され得る。
λのサイズは比較的小さいので、各部分問題(11)〜(13)を、単一の機械上でCPLEXまたはGUROBIなどの任意の市販のIPソルバによって解くことは、実現可能である。
同じ形式(11)〜(13)の多数の部分問題へと大規模なKPを分解して、続いて各部分問題を独立に解くプロセスのために、分散型コンピューティングフレームワークが使用され得る。いくつかの実施形態では、このプロセスは、MapReduce、MPI、HADOOP、SPARK、または任意の他の分散型コンピューティングフレームワークもしくはモデルを使用して実施され得る。以下では、MapReduceのセマンティクスが、アルゴリズムを説明するための例として使用される。説明される技法は、他の分散型コンピューティングフレームワークまたはモデルにおいて使用され得る。
図1は、本明細書の実施形態による、情報フローを用いてKPを解くための分散型コンピューティングシステム100の例を示す図である。KPを解くための分散型コンピューティングシステム100(または分散型フレームワーク100)は、例としてMapReduceコンピューティングモデルを使用する。いくつかの他の実施形態では、分散型コンピューティングシステム100は、MPI、HADOOP、SPARK、または任意の他の分散型コンピューティングフレームワークもしくはモデルを使用して実装され得る。
分散型コンピューティングシステム100は、複数のIPソルバ(マッパとも呼ばれる)110、複数の集約器(低減器とも呼ばれる)120、双対乗数更新器(マスターノードとも呼ばれる)130を含む。IPソルバ110は、たとえば、CPLEXもしくはGUROBIなどの、市販のまたは既製のIPソルバであってよく、または、以下でより詳細に説明されるような、階層貪欲IPソルバなどのカスタマイズされたIPソルバであってよい。複数のIPソルバが、分散型コンピューティングシステム100において複数のデータ処理装置の間で分散される。たとえば、各IPソルバはコンピュータの単一のプロセシングコアによって実行され得る。いくつかの実施形態では、複数のIPソルバは、コンピューティングクラスタまたはクラウドコンピューティングシステムによって実装される。IPソルバ110はユーザデータ140を受信することができる。たとえば、部分問題(11)〜(13)において、ユーザiのためのユーザデータ140は、pi、bi、およびciを含み得る。たとえば、各IPソルバ110は、局所制約を満たすように部分問題(11)〜(13)を解くことができる。
いくつかの実施形態では、反復的アルゴリズムが(x,λ)の対について解くために利用される。各反復において、(11)の解x
i,jはIPソルバ110によって計算され、IPソルバ110は次いで、ユーザiによって消費されるナップサック資源に対応する、K個の値
を出す。低減器120は、各ナップサックのために消費される全体の資源を集約する。
マスターノード130は、1つまたは複数の更新規則またはアルゴリズムに従って、たとえばスラックに基づいて、ラグランジアン乗数λを更新することができる。
たとえば、λ
kを更新する1つの方法は、双対降下(DD)アルゴリズムを適用することである。たとえば、(t+1)番目の反復に対して、
であり、ハイパーパラメータαは学習率である。
いくつかの実施形態では、マスターノード130は、以下でより詳細に説明されるような同期座標降下(SCD)アルゴリズム、または他のアルゴリズムに従って、ラグランジアン乗数λを更新することができる。
いくつかの実施形態では、ラグランジアン乗数λが与えられると、IPソルバ110の各々が、各ユーザiに対する決定変数{xi,j}について式(11)〜(13)を再び解くことができる。決定変数は、すべてのユーザのための決定150として返され得る。たとえば、xi,jは、アイテムj(たとえば、HUABEIからの何らかのクーポン)がユーザiに提供されるかどうかを示すことができる。いくつかの実施形態では、決定変数{xi,j}は記憶されており、生のトラフィックにサービスするためにフェッチされ得る。たとえば、ユーザiが稼働中である場合(たとえば、ユーザiがAlipayアプリを使用して支払うとき、またはAlipayアプリのあるページを訪問するとき)、プラットフォーム(たとえば、Alipayアプリ)は、ユーザiのための計算された決定変数xi,jに従ってアイテムjをユーザiに提供することができる。
図2は、本明細書の実施形態による、ナップサック問題を解決するためのMapReduceアルゴリズム250(アルゴリズム1とも呼ばれる)の例の疑似コード200である。いくつかの実施形態では、MapReduceアルゴリズム250はT回の反復を含み得る。各反復t内で、252において、マッパは各ユーザのためにそれぞれのMap関数(たとえば、210と定義され注記されるような)を実行することができる。各Map関数はそれぞれ、K個の全体制約またはK個のナップサックに関するk個の値を返す。いくつかの実施形態では、N個のマッパは、それぞれのユーザのためのそれぞれのMap関数を並列に実行することができる。
254において、K個のナップサックの各々に対して、各ナップサックのためにN人のユーザによって消費される全体の資源
は、Reduce関数(たとえば、220と定義され注記されるような)によって計算され得る。いくつかの実施形態では、K個の低減器が、それぞれのナップサックのためのそれぞれのReduce関数を並列に実行することができる。
256において、MapReduceアルゴリズム250は、たとえば式(14)に関して説明された技法に従って、λ更新規則として双対降下(DD)を使用する。258において、λが収束した場合、または最大の回数であるT回の反復の後で、MapReduceアルゴリズム250は終了しλを返す。いくつかの実施形態では、たとえば、2回の反復の間でのλの差が閾値未満である場合、λは収束したものと見なされ得る。
疑似コード200において示されるようなアルゴリズム1によって計算されるλが与えられると、式(11)〜(13)を再び解くことができる。ユーザのための決定変数{xi,j}は、たとえば、すべてのユーザのための決定150として返され得る。
現実世界の適用では、資源はしばしばネストされたユーザとして組織化されるので(たとえば、タクソノミー)、局所制約はしばしばネストされた階層構造を示す。
説明のための例として、プラットフォームAから5個、およびプラットフォームBから5個の、全体で10個の提案があり、ユーザが、プラットフォームAまたはプラットフォームBのいずれかから2個以下だけの、および全体で3個以下だけの提案を受けることが求められる、単純なマーケティングキャンペーンを考える。
この例の局所制約は次のように表され得る。
この例では、局所制約は2レベルの木として構造化される。実際には、構造は有向非巡回グラフ(DAG)として表され得る。一部は、はるかにより複雑な階層を呈し得る。DAGは、有向閉道のない有限有向グラフである。等価的に、DAGはトポロジカル順序を有する有向グラフであり、トポロジカル順序は、それぞれの辺がシーケンスの中のより早いものから遅いものに向かうような頂点のシーケンスである。有向グラフのトポロジカル順序は、頂点uから頂点vへの1つ1つの有向な辺uvに対して、順序においてuがvの前に来るような、頂点の線形順序である。いくつかの実施形態では、グラフの頂点は実行されるべきタスクを表すことがあり、辺は、あるタスクが別のタスクより前に実行されるべきであるという制約を表すことがある。この場合、トポロジカル順序は、タスクに対して有効なシーケンスである。トポロジカル順序は、グラフが有向閉道を有しない場合にのみ、すなわち、グラフがDAGである場合に可能である。どのDAGも、少なくとも1つのトポロジカル順序を有する。あらゆるDAGのトポロジカル順序が既知のアルゴリズムによって構築され得る。
局所制約lに対して、その資源インデックス集合をS(l)によって表記し、すなわち、S(l)={j:ci,j,l=1}である。以下の条件
ci,j,l∈{0,1},∀j∈{1,...,M},∀l∈{1,...,L}、
および
S(l)∩S(l')=φまたはS(l)⊆S(l')またはS(l)⊇S(l'),∀l,l'
が満たされるとき、ナップサック問題は、ユーザiのための階層局所制約構造を有すると見なされる。
資源インデックス集合は、ある集合が別の集合の部分集合でない限り、重複しない。いくつかの実施形態では、DAGは、S(l)⊆S(l')である場合にのみ、S(l)からS(l')への弧があるように、M個の資源インデックス集合のために構築され得る。
図3は、本明細書の実施形態による、それぞれ、(15)から(17)の局所制約に対する資源インデックス集合310、320、および330の有向非巡回グラフ(DAG)300の例を示す図である。(15)の局所制約に対する資源インデックス集合310は資源インデックス1〜5を含み、(16)の局所制約に対する資源インデックス集合320は資源インデックス6〜10を含み、(17)の局所制約に対する資源インデックス集合330は資源インデックス1〜10を含む。示されるように、資源インデックス集合310および資源インデックス集合320は共通のインデックスを有しない。資源インデックス集合310および資源インデックス集合320の各々が、資源インデックス集合330の部分集合である。
図4は、本明細書の実施形態による、階層構造を伴う制約を受けるIP問題を解くための貪欲アルゴリズム(アルゴリズム2と呼ばれる)400の例の疑似コードである。貪欲アルゴリズム400の例は、階層局所制約のもとでIP問題を解くために使用され得る。たとえば、ユーザiのための最適化問題(11)〜(13)は、トポロジカル順序でDAGを走査する貪欲アルゴリズムによって効率的に解かれ得る。貪欲アルゴリズム400の例を実装するように構成されるソルバは、階層貪欲IPソルバと呼ばれ得る。たとえば、階層貪欲IPソルバは、双対乗数λを与えられると各ユーザのための決定変数を計算することができる。
貪欲アルゴリズム400は最初に、たとえば、すべての資源のx
i,jの決定変数を1としてマークすることによって、410においてすべての資源を選ぶ。420において、資源インデックスjは、コスト調整された報酬(これはx
i,jの寄与分の双対値でもある)に基づいて非昇順でソートされる。
430において、資源インデックス集合{S(l)}が、たとえば、DAGの最低レベルから開始して、DAGのトポロジカル順序で走査される。各S(l)に対して、440において、以前に選択された資源(すなわち、対応する決定変数xi,j=1を伴う資源)が、それらの合計が局所制約Clを超えるまで、コスト調整された報酬の非降順でフェッチされる。いくつかの実施形態では、これは、決定変数xi,j=1を伴い、資源インデックス集合S(l)の中で上位のコスト調整された報酬を有する、Cl個の資源を選択することと等価である。したがって、非降順のコスト調整された報酬の中の残りの資源は、選択されない、または選ばれないままである。
450において、S(l)内の選ばれない資源に対するxi,jの値はすべて0としてマークされ、以後の反復においてもはや考慮されない。この貪欲選択プロセスは、DAGの中のすべてのノードが走査されるまで繰り返される。460において、決定変数xi,jが出力される。
例として、図3に示されるように、(15)の局所制約(ここではCl=2)に対する資源インデックス集合310に対して、それぞれのコスト調整された報酬の非降順でソートされる資源1〜5の中で上位のCl=2個の資源(たとえば、資源2および4)が選択される。資源インデックス集合310の中の選択されない資源の決定変数(すなわち、この例では資源1、3、および5)は0としてマークされ、再び考慮されない。同様に、(16)の局所制約(ここではC2=2)に対する資源インデックス集合320に対して、それぞれのコスト調整された報酬の非降順でソートされる資源6〜10の中で上位のC2=2個の資源(たとえば、資源6および9)が選択される。いくつかの実施形態では、資源インデックス集合320の中の選択されない資源の決定変数(すなわち、この例では資源7、8、および10)は0としてマークされ、再び考慮されない。
DAG300の階層の次のレベルにある、(17)の局所制約(ここではC3=3)に対する資源インデックス集合330に対して、1としてマークされる決定変数を伴う、4つの以前の資源2、4、6、および9がある。コスト調整された報酬の非降順でソートされる、4つの以前の資源2、4、6、および9の中で上位C3=3個の資源(たとえば、資源2、6、および9)が選択される。いくつかの実施形態では、資源インデックス集合330の中の残りの資源(すなわち、この例では資源4)の決定変数は0としてマークされる。この例では、DAG300は完全に走査されており、上位3個の資源(すなわち、資源2、6、および9)が選択された資源として出力される。
多項式時間の複雑さを有する貪欲アルゴリズムは、最大化問題(11)〜(13)を最適に解くことができる。最適性の証明は次の通りである。制約(12)および(13)を満たすが、貪欲解(x
* i,j,j=1,...,Mによって表記される)とは異なる、あらゆる他の解(
、j=1,...,Mによって表記される)が与えられると、そこで選ばれる資源が異なる、DAGのトポロジカル順序の中の最初のノードを特定することができる。貪欲アルゴリズムの性質により、資源jの調整された報酬が資源j'の調整された報酬より小さくないが、x
* i,j=1、x
* i,j'=0、
、
であるノードにおいて、資源jおよびj'の対が存在するはずである。
は、(11)の目標値を下げることなく、
、
と設定することによって修正され得る。すべての制約(12)および(13)が依然として満たされており、それは、DAGのトポロジカル順序におけるあらゆるより後のノードが、jとj'の両方を含むか、または両方とも含まないかであるからである。このようにして、目標値を下げることなく、またはいずれの制約にも違反することなく、あらゆる解が貪欲解へと変換され得る。これで証明は完了する。
いくつかの実施形態では、たとえば、アルゴリズム2によって、またはIP問題を解くための任意の他のアルゴリズムによって決定変数が解かれると、同期座標降下(SCD)アルゴリズムが、双対乗数λを更新するために使用され得る。
いくつかの実施形態では、乗数λの所与のセットに対して、アルゴリズム2は、コスト調整された報酬
の相対順序に、それらの実際の値を知る必要なく依存する。この性質は、効率的なアルゴリズムが条件(8)〜(10)を満たすλ
kを更新しながら、他の乗数(k'≠kであるλ
k')を一定に保つことを可能にする。このアルゴリズムは、新しいλ
kのすべての非負の値の中で、
の相対順序がλ
kのM個の線形関数f
j(λ
k)の対ごとの交差点のみにおいて、または水平軸との交差点(もしあれば)において、変化する可能性があり得るという事実を利用することができる。M個の線形関数f
j(λ
k)は、たとえば、j=1,...,Mに対するコスト調整された報酬
であることがあり、または、λ
kの関数としての(11)の双対問題の目的関数の他の変数であることがある。
図5は、本明細書の実施形態による、ユーザiに対する双対乗数λ3の候補の例を示すプロット500である。M=2かつK=3であると仮定すると、局所制約の例は
xi,1+xi,2≦1
である。
図5は、M=2個の線形関数510および520と、ユーザiに対する(11)の最適化結果に影響し得る3つの新しい乗数候補(λ
3 (1),λ
3 (2),λ
3 (3))とを示す。具体的には、λ
3 (1)は線形関数510と520の対ごとの交差点におけるλ
3の値であり、λ
3 (2)は線形関数510と水平軸の対ごとの交差点におけるλ
3の値であり、λ
3 (3)は線形関数520および水平軸の対ごとの交差点におけるλ
3の値である。
この例はまた、(11)〜(13)の最適化結果がすべての交差点において変化することが必ずしも真ではないことを示す。たとえば、ここでは、最大化するものはλ3 (2)において変化しない。
図6は、本明細書の実施形態による、双対乗数候補を計算するためのアルゴリズム(アルゴリズム3とも呼ばれる)600の例の疑似コードである。いくつかの実施形態では、アルゴリズム600は、ユーザiに対するすべての新しい双対乗数候補λkを計算するために使用され得る。具体的には、アルゴリズム600は、λkのM個の線形関数(たとえば、λkの関数としての(11)の双対問題の目的関数)の交差点または水平軸とのそれらの交差点(もしあれば)を計算することができる、関数CalculateIntersectionPoints650を含む。たとえば、図6に示されるように、関数Intersect(f(λk),g(λk))610は、f(λk)およびg(λk)が平行ではないとき、f(λk)とg(λk)の非負の交差点≧0を返すために使用される。λkのM個の線形関数の各々に対して、λkの他の(M-1)個の線形関数および水平軸との交差点が、計算されて集合∧kに保存される。集合∧kの中の重複しない値が、ユーザiに対する新しい双対乗数候補λkとして返され得る。
各ユーザに対する新しいλkのすべての候補が与えられると、座標降下アルゴリズムが、すべてのユーザを考慮して、他の乗数は一定のままにしながら条件(8)〜(10)を満たす更新されたλkを計算する。
図7は、本明細書の実施形態による、KPを解くためのMapReduceモデルを伴う同期座標降下(SCD)アルゴリズム(アルゴリズム4とも呼ばれる)750の例の疑似コード700である。同期座標降下アルゴリズム750は、MapステップとReduceステップを反復的に実行するためのT回の反復を含み得る。各反復t内で、752のMapステップにおいて、マッパは、たとえば、IP部分問題(14)〜(16)を独立に解くために、各ユーザに対してそれぞれのMap関数(たとえば、710と定義され注記されるような)を実行することができる。いくつかの実施形態では、N個のマッパがそれぞれのMap関数を並列に実行することができる。754のReduceステップにおいて、1つ1つのλkが、他の双対乗数λk'(k'≠k)を一定にすることによって更新される。いくつかの実施形態では、K個の低減器がそれぞれのReduce関数を並列に実行することができる。
具体的には、Map関数710によれば、各ユーザiに対して712において、マッパが、図6のアルゴリズム3において定義されるような関数CalculateIntersectionPoints650に従って新しいラグランジアン乗数λkの候補を取得する。714において、マッパは降順で新しいλkの候補をソートする。715において、マッパは、ラグランジアン乗数λkのすべての候補を通り、たとえば図4に関して説明されるようなアルゴリズム2に従って、式(11)〜(13)を解くことによって決定変数{xi,j}を計算する。いくつかの実施形態では、λが与えられると、決定変数{xi,j}は、たとえばIPソルバの任意の適切なアルゴリズムに従って式(11)〜(13)を解くことによって計算され得る。716において、マッパは、λkを対応する新しい値に更新する場合にk番目のナップサックにおいて使用されるであろう、資源の量を計算する。通常、使用される資源の量は、λkが減少するにつれて増大する。718において、マッパは、λkが減少するにつれて、使用される資源の増分の量のみを放出する。いくつかの実施形態では、全体の量ではなく増分の量を使用することの利点は、図7のReduce関数720において行われるような閾値νを決定するために、ν2≧νであるすべての放出されたまたは返されたν2にわたって加算することが可能になることである。全体の量が放出される場合、同じユーザに対応する2つ以上のν1があることがあり、(一般性を失うことなく)ユーザ当たり多くても1個のアイテムが許可されると仮定すると、そのユーザによる消費の二重カウントがないことを確実にするために、追加の予約(より多くの記憶および計算を意味する)が必要とされ得る。
754において、K個のナップサックの各々に対して、Reduce関数(たとえば、720と定義され注記されるような)が、同じ鍵(すなわち、ナップサックインデックスk)に対する放出された結果をすべてのユーザにわたって集約し、すべてのユーザにわたってk番目のナップサックのために使用される全体の資源が722においてB
kを超えないような、最小の閾値νとなるように更新されたλ
kを計算する。いくつかの実施形態では、すべてのユーザにわたるλ
kのすべての候補が非昇順でソートされ得る。低減器は、所与の
についてすべてのユーザにわたってk番目のナップサックのために使用される全体の資源を、
より小さくないλ
kのすべての候補に対応する使用される資源の増分の量を加算することによって計算することができる。最小の閾値νの値は、任意の所与の候補
についてすべてのユーザにわたってk番目のナップサックのために使用される全体の資源がB
kを超えないように、一方で任意の所与の候補
についてすべてのユーザにわたってk番目のナップサックのために使用される全体の資源がB
kを超えるように、決定され得る。いくつかの実施形態では、最小の閾値νの値は、λ
kの候補のうちの1つではないことがある。いくつかの実施形態では、たとえば、以下で図13に関して説明される例によれば、λ
kの最小の閾値νの候補を見つける際に、補間が実行され得る。
Reduce関数720において行われるような加算は、選ばれた閾値νのためにユーザによって使用される全体の資源を適切に計算し、それは、λkが減少するにつれて、使用される資源の増分の量のみをマッパが放出するからである。いくつかの実施形態では、K個の低減器は、それぞれのナップサックのためのそれぞれのReduce関数を並列に実行することができる。
図13は、本明細書の実施形態による、KPを解くためのMap関数710およびReduce関数720の実行結果の例を示すプロット1300である。この例では、N=3人のユーザが考慮される。3人のユーザの各々に対して、Map関数710が、たとえばそれぞれIPソルバによって並列に実行され得る。k=3かつBk=28である、k番目のナップサックに対応するk番目の全体制約を仮定すると、各ユーザは、それぞれのIP問題を解き、図5〜図7に関して説明される技法を使用してMap関数710に従ってλ3のそれぞれの候補を取得することができる。ボックス1310は、3人のユーザの各々に対するMap関数710の実行結果を示す。たとえば、ユーザ1について1311において示されるように、降順のλ3の3つの候補(Map関数710においてν1と表記される)は、それぞれ9、6、および3である。これらのλ3の3つの候補のもとでk番目のナップサックにおいて使用されるであろう資源の全体の量は、それぞれ5、6および7である。718によれば、Map関数710は、λkが減少するにつれて、使用される資源の増分の量(Map関数710においてν2と表記される)のみを放出し、これらはそれぞれ、5、6-5=1、および7-6=1である。したがって、ユーザ1に対する放出される出力(k,[ν1,ν2])は、それぞれ(3,[9,5])、(3,[6,1])、および(3,[3,1])である。
ユーザ2について1312において示されるように、降順のλ3の3つの候補(Map関数710においてν1と表記される)は、それぞれ8、5、および2である。これらのλ3の3つの候補のもとでk番目のナップサックにおいて使用されるであろう資源の全体の量は、それぞれ10、12、および13である。718によれば、Map関数710は、λkが減少するにつれて、使用される資源の増分の量(Map関数710においてν2と表記される)のみを放出し、これらはそれぞれ、10、12-10=2、および13-12=1である。したがって、ユーザ2に対する放出される出力(k,[ν1,ν2])は、それぞれ(3,[8,10])、(3,[5,2])、および(3,[2,1])である。
ユーザ3について1313において示されるように、降順のλ3の3つの候補(Map関数710においてν1と表記される)は、それぞれ7、4、および1である。これらのλ3の3つの候補のもとでk番目のナップサックにおいて使用されるであろう資源の全体の量は、それぞれ9、10、および11である。718によれば、Map関数710は、λkが減少するにつれて、使用される資源の増分の量(Map関数710においてν2と表記される)のみを放出し、これらはそれぞれ、9、10-9=1、および11-10=1である。したがって、ユーザ3に対する放出される出力(k,[ν1,ν2])は、それぞれ(3,[7,9])、(3,[4,1])、および(3,[1,1])である。
ボックス1320は、k=3の場合の、k番目のナップサックに対応するk番目の全体制約に対するすべての3人のユーザのためのReduce関数720の実行結果を示す。いくつかの実施形態では、すべてのユーザにわたるλ3のすべての候補を、たとえば、それぞれの増分の使用される資源[5,10,9,1,2,1,1,1,および1]とともに[9,8,7,6,5,4,3,2,および1]として示されるように、非昇順でソートすることができる。この例では、Bk=28が与えられると、λ3=4に対応する資源の全体の量が28に等しいことが決定される。λ3=4に対応する資源の全体の量は、4以上のλ3のすべての候補(たとえば、[9,8,7,6,5,4])に対してそれぞれの増分の使用される資源(たとえば、[5,10,9,1,2,1])を一緒に加算することによって計算され得る。任意のλ3<4に対応する資源の全体の量がBk=28を超えるであろうことも決定され得る。たとえば、λ3=3に対応する資源の全体の量は29であることがあり、これは、3以上のλ3のすべての候補(たとえば、[9,8,7,6,5,4,3])に対するそれぞれの増分の使用される資源(たとえば、[5,10,9,1,2,1,1])を一緒に加算することによって計算され得る。この例では、最小の閾値νは4であると決定される。λ3はν=4となるように更新され得る。
いくつかの実施形態では、Bk=28.5である場合、最小の閾値νを決定するために補間が実行され得る。たとえば、λ3=4に対応する資源の全体の量が28であり、λ3=3に対応する資源の全体の量が29であるとすると、λ3の最小の閾値νに対応する資源の全体の量がBk=28.5を超えないようにλ3の最小の閾値νを決定するためにλ3の2つの値を補間することによって、最小の閾値νが3.5であると決定され得る。いくつかの実施形態では、最小の閾値νを計算するために他の技法が使用され得る。
図7に戻って参照すると、λを更新するためのプロセスは、最大の回数であるT回の反復のために繰り返されることがあり、λが収束に達する場合早期に終了する。たとえば、756において、座標降下アルゴリズム750は、λが収束した場合、または最大の回数であるT回の反復の後で、終了してλを返す。
座標降下アルゴリズム750において示されるようなアルゴリズム1によって計算されるλが与えられると、式(11)〜(13)を再び解くことができる。ユーザのための決定変数{xi,j}は、たとえばすべてのユーザのための決定150として返され得る。
座標降下アルゴリズム750は、すべてのk=1,...,Kに対してλkを同時に更新する同期座標降下を使用するが、一度に1つの乗数を更新する巡回座標降下、および複数の乗数を並列に更新するブロック座標降下などの、座標降下の他の変形も適用可能である。我々のシステムでは、すべての前述のアルゴリズムがサポートされる。
K=1という特別な場合について、アルゴリズム4が、最適解の全体の報酬よりもせいぜいmaxi,jpi,j少ないだけの全体の報酬を伴う解に収束するであろうことを示すことができ、それは、このアルゴリズムが基本的に、有理ナップサック問題を解いた後の丸められた整数解を生み出すからである。より一般的な事例について、アルゴリズム4によって計算される解は、この種類の問題の事例に対してはほぼ最適であることが経験的に示され得る。
座標降下アルゴリズム750のMap関数は、ユーザ当たりM個の資源およびK個の全体制約を仮定すると、O(KM3logM)という時間的な複雑さを有する。この複雑さは、資源とナップサックとの間に1対1のマッピングがあり(すなわち、M=K、かつbi,j,k=0,∀j,k)、各ユーザのために選ばれる資源の最大の数(以後Qと表記される)を制限する単一の局所制約があるような、いくつかの現実世界の事例では大きく低減され得る。
そのような場合、k番目の資源が上位Q個の調整された報酬を有するかどうかを決定する新しいλkの候補はせいぜい1個である。具体的には、資源kの調整された報酬がすでに上位Q個の中にある場合、新しいλkの重要な値は、調整された報酬を(Q+1)番目の調整された報酬へと下げるものである。資源kの調整された報酬が上位Q個の中にない場合、新しいλkの重要な値は、調整された報酬をQ番目の調整された報酬へと上げるものである。
図8は、本明細書の実施形態による、各ユーザ(アルゴリズム5とも呼ばれる)850のために最高で最大の数(Qと表記される)の資源を選ぶための、Map関数の例の疑似コード800である。図8に示されるように、
は、k番目の資源がユーザiのために選ばれるかどうかを決定する閾値である。新しいλ
kが
より大きい場合、k番目の資源の更新された調整された報酬は
より低いので、選ばれない。一方、
より低い新しいλ
kは、k番目の資源の得られた調整された報酬がすべての資源にわたって上位Q個の中にあることを保証する。したがって、アルゴリズム5は、k番目の資源が上位Q個の調整された報酬を有するかどうかを決定する、新しいλ
kの候補だけを(もしあれば)正しく放出する。
アルゴリズム5は、O(K)という時間的な複雑さで長さKのアレイのn番目に大きい要素を返すアルゴリズムである、quick_select(array,n)を使用する。そうすると、Qの値とは無関係に、アルゴリズム5の全体の時間的な複雑さはO(K)である。
最高で10億の規模の問題を解くためにアルゴリズムをスケーリングするときのアルゴリズムの収束をさらに加速するために、追加のアルゴリズムが開発されており、これは効果的であることが証明されている。
ある例として、10億の規模の問題を解くためのアルゴリズムの収束をさらに高速化するために、微調整されたバケット化が使用され得る。図7に示されるように、アルゴリズム4におけるReduce関数の単純な実装は、ν1の値によって放出された結果をソートし、ソートされた結果に基づいて最小の閾値νを選ぶことである。高速化するための1つの方法は、ν1の値をバケット化し、各バケツに対してν2の合計を計算することである。そうすると、閾値νが入る目標バケツを特定することができ、νの値を、たとえばバケツ内で補間することによって近似することができる。
バケット化および補間を通じた上記の近似の精度を高めるために、いくつかの実施形態では、バケツサイズは、νの真の値の周囲では小さく、バケツがνを含まない可能性が高いときには大きくなるように設計され得る。残念ながら、νの真の値は前もって知られていない。それでも、アルゴリズム4の反復的な性質により、以前の反復において計算される値、すなわちλ
t kは、
の妥当な推定を与える。したがって、バケツがλ
t kの周囲ではより小さく、または最小のサイズであり、λ
t kから離れるにつれて(たとえば、指数関数的に、または別の方式で)増大するように、不均等なバケット化方式が設計され得る。ある例として、以前の反復において計算された値λ
t kが与えられると、候補λ
kに割り当てられるバケツidは
のように与えられ、ここでΔはバケツサイズを制御するパラメータである。追加のまたは異なる不均等なバケット化方式が使用され得る。
すべての他の反復的なアルゴリズムのように、良い初期化から開始することで、アルゴリズムの収束を著しく加速することができる。いくつかの実施形態では、アルゴリズム4における双対乗数の開始点λ0をランダムに選ぶことができる。いくつかの実施形態では、双対乗数の開始点は、サンプリングされたデータを使用して事前に解くことによって推定され得る。たとえば、ランダムユーザの小さい集合をサンプリングし、ナップサック予算を比例的に調整することによって、アルゴリズム4は、より良い初期化で開始され得る。事前に解くことで大規模なKPに対して最大で40%から75%の反復をなくすことができることを、実験が示している。
図9は、本明細書の実施形態による、サンプリングアルゴリズム(アルゴリズム6とも呼ばれる)950による事前解決の例の疑似コード900である。サンプリングアルゴリズムによる追加のまたは異なる事前解決は、KP問題を解くための説明されるアルゴリズムに関連して使用され得る。アルゴリズム6は、事前解決のτ回の反復を含み得る。いくつかの実施形態では、事前解決のτ回の反復は、順番にまたは並列に行われ得る。順番に実行される場合、t番目の反復の前に計算されるλ値の平均が、実行時間をさらに減らすために使用される。ある例として、数億人のユーザがいると、事前解決の各反復のためにn=10000人のユーザがサンプリングされ得る。
アルゴリズム4によって返されるλを用いて、各ユーザiのための決定変数x
i,jが計算され得る。いくつかの実施形態では、すべてのユーザにわたって使用される全体の資源が、全体制約(2)にわずかに違反することがある。いくつかの実施形態では、全体制約の実現可能性を厳密に確保して、収束を加速するために、軽量な後処理方法が使用され得る。この後処理方法は、コスト調整されたユーザ報酬の量に基づくことがあり、これは実際には所与のユーザiの寄与分の双対値
である。
具体的には、ユーザは
の非降順でソートされ、すべての全体制約が満たされるまで、決定変数x
iの全体のユーザが0としてリセットされ得る。コスト調整されたユーザ報酬
は、ユーザiから何らかの資源を選ぶことの利益を何らかの形で評価するので、より小さい
の値を伴う資源を除去することが、道理にかなったヒューリスティックであると考えられる。
KPを解くための様々な説明されるアルゴリズムを試験するために、合成データと現実世界のデータの両方が使用されている。たとえば、実験では、N人のユーザとK個の全体制約を伴う合成問題に対して、別様に述べられない限り、pi,jは[0,1]において均一に分布する。2つの種類の全体制約が考えられる。
密:bi,j,kが[0,1]において均一に分布する、および
疎:M=Kであり、j=kの場合はbi,j,kが[0,1]において均一に分布し、それ以外の場合は0である。
全体制約の予算は、M、N、およびLとともにスケーリングする大きくない値として設定され、このことが事実上制約の厳格さを確実にする。局所制約のためのパラメータci,j,lおよびClは、すべて1に等しい。
以下では、最適性比が、緩和されたLP目標値に対する最初の目標値の比として定義され、制約違反比が、ある制約に対する所与の予算に対する過剰な予算の比として定義され、全体的な違反を定量化するために、すべての制約にわたる最大制約違反比を使用する。
説明されるアルゴリズムによって生み出されるKP解の品質を測るため、緩和されたLP解に対するKP解(上で説明された後処理方法を用いてアルゴリズム4によって計算される)間の最適性比を評価するために、一式の実験が行われる。
実際には、説明された分散する解に対して比較すべき、10億の規模のKPに対する上限を計算することができる、既存のLPソルバを見つけることは難しい。比較を簡単にするために、既存のLPツールによって解くことができる、大きくないサイズのデータセットに対して、最適性ギャップが示されている。緩和されたLP問題は、二値の制約xi,j∈{0,1}を0≦xi,j≦1,∀i,∀jで置き換えることによって得られ、GOOGLE OR-toolsを使用して解かれる。
図10は、本明細書の実施形態による、図7の説明されたアルゴリズムを使用したKP解とLP緩和によって計算される上限との間の、最適性ギャップの例を示すプロット1000である。KP解は、上で説明された後処理方法を用いて図7に示されるようなアルゴリズム4に従って計算される。プロット900は、N=1000、N=10000、およびK∈{1,5,10,15,20}に対する最適性比を示す。この実験では、ユーザ当たりの資源の数Mは10に固定される。資源の多様性を高めるために、b
i,j,kは、0.5の確率で[0,1]において均一に分布し、残りの確率で[0,10]において均一に分布する。局所制約の3つのシナリオに対する最適性比が図9において評価され示されており、ここで、
C=[1]は
を意味し、
C=[2]は
を意味し、
C=[2,2,3]は(15)から(17)によって与えられる階層局所制約に対応する。
Nの各値および局所制約のシナリオに対して、Kが変化するときの平均の最適性値(3回の実行にわたる)が図10にプロットされている。図10に示されるように、Nが増大するにつれて最適性ギャップは減少する。すべての実験の場合に対して最適性比は98.6%を超え、局所制約のすべてのシナリオのもとでN=10000に対して99.8%を超える。図10の結果は、K<<Nであるとき、アルゴリズム4によって計算されるKP解がほぼ最適であるという直感を支持している。
ユーザの数Nが多いとき、サンプリングされるユーザを用いた事前解決が、λの良い開始点を生成するために使用され得る。ある実験では、事前解決の各反復のためにn=10000人のユーザがサンプリングされ、n<<Nであるので事前解決の計算時間は無視できる。事前解決についてλが収束するまでのSCD反復の数が、λk=1.0,∀k=1,...,Kで常に開始する場合に必要とされる反復の数と比較される。
図11は、本明細書の実施形態による、事前解決がある場合とない場合のSCD反復の数の例を示す表1100(表1とも呼ばれる)である。表1は、N=100万、1000万、1億である疎問題の事例に対するSCD反復の数を示す。各Nに対して、M=10かつK=10である。表1の結果は、サンプリングされたユーザを用いた事前解決が、SCD反復の数を40%から75%低減したことを示している。
一方、事前解決によって生み出されるλは制約の違反につながることがあるので、事前解決だけではKP問題を解くのに十分ではない。事前に解かれたλを全体のデータセットに適用するとき、N=100万、1000万、1億に対してそれぞれ、全体制約違反の数が10分の4、5、および3であることが観測され、対応する最大制約違反比は、それぞれ2.5%、4.1%、および3.0%である。しかしながら、分散型SCDの解は違反を有しない。事前解決の解の最初の目標値は、制約違反があっても、分散型SCDの解より常に小さいことにも留意する価値がある。
図12は、本明細書の実施形態による、大規模な試験データセットに対してSCDアルゴリズム(たとえば、アルゴリズム4)を使用した、分散型システムの実験結果の例を示す表1200(表2とも呼ばれる)である。大規模な試験データセットは、N=1億人のユーザであるいくつかの疎問題の事例を含むが、各ユーザの中の資源の数Mは1から100まで変化するので、考慮される資源の総数は最高で100億である。解の品質および実行時間が試験される。表2は、SCD反復の数、最初の目標値、および双対ギャップを示す。双対ギャップは最初の目標値よりはるかに小さく、生み出される解がほぼ最適であることを示している。さらに、アルゴリズム4が終了すると(すなわち、後処理なしですべての制約が満たされると)、全体制約に違反しない。
システムの実行時間は、毎日の最適化および決定変数の調整についてのビジネス上の必要性を満たし、たとえば、共有されたAPACHE HADOOPコンピューティングインフラストラクチャにおいて最高で1000個のCPUを用いて実行すると(使用される厳密なCPUの数はクラスタ負荷の影響を受けるが)、10億個の決定変数および制約に対する最適化は、約1時間の実時間内に収束することが可能であった(厳密な実時間はハードウェアおよび作業負荷により変動する)。
図14Aは、本明細書の実施形態による、ナップサック問題(KP)を解くことによってN人のユーザの間でのK個のプール(たとえば、K個のナップサック)へのM個の資源の資源配分を実行するためのプロセス1400aの例のフローチャートである。KPは、たとえば(1)〜(4)に表されるような、K個の全体制約およびL個の局所制約を受ける。各プールは、KPにおいて説明されるようなそれぞれのナップサックに対応し得る。KPは、トラフィックのルーティング/管理を含む資源配分、マーケティングキャンペーン、商品/サービスのプロモーションなどの、1つまたは複数の現実世界のシナリオを表すことができる。図2および図7に関して上で説明されたアルゴリズム1および4は、プロセス1400aの例である。
プロセス1400aは、分散型コンピューティングシステム100などの分散型コンピューティングシステムを使用して実行されてよく、これはいくつかのプロセッサ(たとえば、異なるユーザにわたって分散され、または異なる位置に配置される)を含む。プロセッサの各々が、たとえば、マルチコア処理能力を活用することによって、1つまたは複数の個別のソルバとして機能し、またはそれをサポートすることができる。ソルバは、たとえばソフトウェア、ハードウェア、または両方の組合せによって実装される、コンピュータ実装ソルバであり得る。各々の個別のソルバは、独立に互いに並列に実行することができる。いくつかの実施形態では、個別のソルバの一部は、独立に互いに並列に実行することができるIPソルバ(マッパとも呼ばれる)110として機能することができる。いくつかの実施形態では、プロセッサのうちの1つまたは複数は、独立に互いに並列に実行することができる集約器(低減器とも呼ばれる)120として機能することができる。いくつかの実施形態では、プロセッサのうちの1つまたは複数は、双対乗数更新器(マスターノードとも呼ばれる)130として機能することができる。いくつかの実施形態では、たとえば、並列処理の能力を活用してKPを解く計算時間を減らすために、異なる個別のソルバが独立に互いに並列に実行することができ、かつ異なる集約器が独立に互いに並列に実行することができる限り、単一のプロセッサが、IPソルバ、集約器、および双対乗数更新器として機能するために使用され得る。
いくつかの実施形態では、分散型コンピューティングシステムは、クラウドコンピューティングシステムとして実装され得る。いくつかの実施形態では、分散型コンピューティングシステムは、MapReduceまたは他の分散型コンピューティングフレームワークもしくはモデルを有し得る。いくつかの実施形態では、分散型コンピューティングシステムは、MPI、HADOOP、およびSPARKなどの共通の分散型プラットフォームを使用して実装され得る。いくつかの実施形態では、プロセス1400aは、本明細書に従って、1つまたは複数のコンピュータのシステムなどのデータ処理装置によって実行され、1つまたは複数の位置に配置され、適切にプログラムされるものとして説明される。たとえば、適切にプログラムされる図15のコンピュータシステム1500が、プロセス1400aを実行することができる。
1402aにおいて、KPのK個の全体制約およびKPのL個の局所制約を表すデータが受信される。いくつかの実施形態では、Lは数十億以上のオーダーである。KはLより小さい。K個の全体制約の各々が、たとえば式(2)に示されるように、2人以上のユーザにわたってM個の資源のそれぞれのプール当たりの最大のコストを制約する。L個の局所制約の各々が、たとえば式(3)に示されるように、M個の資源のユーザ当たりの選択を制約する。
1404aにおいて、KPが、たとえば式(8)〜(13)に示されるような方式で、K個の双対乗数(たとえば、λk,k=1,2,...,K)を使用してN個の部分問題へと分解される。N個の部分問題の各々は、たとえば式(14)〜(16)に示されるように、N人のユーザのそれぞれ1人に対応し、対応するユーザに関するL個の局所制約を受ける。いくつかの実施形態では、Nは10億以上のオーダーである。K個の双対乗数の各々は、K個の全体制約のそれぞれ1つに対応する。K個の双対乗数が与えられると、N個の部分問題は、N個の部分問題の各々を解く際にK個の全体制約を考慮することなく、対応するユーザに関するL個の局所制約を独立に尊重して解かれ得る。
1406aにおいて、N個の部分問題を解くための個別のソルバ(たとえば、IPソルバ110)の数が決定される。いくつかの実施形態では、N個の部分問題を解くための個別のソルバの数を決定することは、KPを解くための指定された計算時間(たとえば、最高で数十億のユーザおよび局所制約を伴うKPの大きな規模のもとでKPを解くための所望される計算時間)に基づいて、N個の部分問題を解くための個別のソルバの数を決定することを含む。いくつかの実施形態では、N個の部分問題を解くための個別のソルバの数を決定することは、個別のソルバの数をユーザの数N以下となるように決定することを含む。個別のソルバの数がNである場合、N個の部分問題の各々がそれぞれの個別のソルバによって解かれ得るので、N個の部分問題は、独立に互いに並列に、それぞれのN個の個別のソルバによって解かれ得る。
1408aにおいて、N個の部分問題は、たとえば、各部分問題をそれぞれのソルバに割り当てることによって、その数の個別のソルバにわたって分散される。たとえば、個別のソルバは、計算負荷を分散させて、複数の個別のソルバの並列処理能力を活用することによりKP全体を解く計算時間を減らすために、N個の部分問題のうちの1つまたは少数(たとえば、1、10、100、または1000のオーダーの)を配分され得る。
1410aにおいて、KPが、2回以上の反復を実行することによって、分散型コンピューティングシステムによって解かれる。いくつかの実施形態では、K個の双対乗数の初期値の集合が、1404aにおいてKPをN個の部分問題へと分解するために使用され得る。K個の双対乗数の初期値は、たとえば、所定の値もしくはランダムな値として決定され、または、上で説明されたようなサンプリングされたデータを使用した事前解決によって推定され得る。K個の双対乗数を更新することができるので、K個の双対乗数に基づいて分解されるN個の部分問題をそれに従って更新することができる。したがって、KPは、反復方式で、たとえば図1のMapReduceアルゴリズム250(アルゴリズム1とも呼ばれる)または図7の同期座標降下(SCD)アルゴリズム(アルゴリズム4とも呼ばれる)750に示されるようなMapReduce方式で、N個の部分問題を解くことによって解かれ得る。
1回の反復の中で、1412aにおいて、N個の部分問題の各々が、その数の個別のソルバのうちの1つによって独立に解かれる。いくつかの実施形態では、N個の部分問題の各々は、その数の個別のソルバまたはマッパのうちの1つによってMap関数(たとえば、252または752に示されるような)を独立に(たとえば、互いに並列に)実行することによって解かれる。Map関数は、Map関数210または710として、または別の方式で定義され得る。いくつかの実施形態では、N個の部分問題の各々を解くことは、N人のユーザ(たとえば、決定変数xi,j)のうちの対応するユーザに配分されるべきM個の資源の各々の量を計算することを含む。
いくつかの実施形態では、N個の部分問題の各々をその数の個別のソルバのうちの1つによって独立に解くことは、部分問題が割り当てられたソルバによってN個の部分問題の各々を独立に解くことを含む。いくつかの実施形態では、N個の部分問題の各々をその数の個別のソルバのうちの1つによって独立に解くことは、その数の個別のソルバのうちの1つによってN個の部分問題の各々を並列に解くことを含む。いくつかの実施形態では、その数の個別のソルバのうちの1つによって独立に解くことは、N個の個別のソルバのそれぞれ1つによってN個の部分問題の各々を並列に解くことを含む。いくつかの実施形態では、N個の部分問題の各々は整数計画(IP)問題である。したがって、N個の部分問題の各々をその数の個別のソルバのうちの1つによって独立に解くことは、IPソルバによってIP問題を独立に解くことを含む。
いくつかの実施形態では、N個の部分問題の各々を解くことはさらに、K個のプールの各々に対して、たとえばMap関数210において定義されるような、対応するユーザに配分されるべきM個の資源の各々の量に基づいて、対応するユーザによるM個の資源のプール当たりのコストを計算することを含む。いくつかの実施形態では、K個のプールの各々に対して、N人のユーザにわたるM個の資源のプール当たりのコストが、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて計算される。
1414aにおいて、K個の双対乗数は、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて更新される。いくつかの実施形態では、K個の双対乗数は、1つまたは複数の個別の集約器または低減器によってReduce関数(たとえば、254または754において示されるような)を実行することによって更新され得る。いくつかの実施形態では、K個の双対乗数の各々は、その数の個別の集約器または低減器のうちの1つによって独立に(たとえば、互いに並列に)Reduce関数(たとえば、254または754において示されるような)を実行することによって更新され得る。Reduce関数は、Reduce関数220もしくは720として、または別の方式で定義され得る。いくつかの実施形態では、K個の双対乗数は、双対降下(DD)、同期座標降下、巡回座標降下、ブロック座標降下、または他の乗数更新アルゴリズムに従って更新され得る。
いくつかの実施形態では、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいてK個の双対乗数を更新することは、たとえば、Reduce関数220のように、対応するプールに関するK個の双対乗数の各々を、対応する全体制約によって制約される対応するプールに対する2人以上のユーザにわたるM個の資源のプール当たりの最大のコストと、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて計算される対応するプールに対するN人のユーザにわたるM個の資源のプール当たりのコストとの差に基づいて、更新することを含む。
いくつかの実施形態では、K個の双対乗数を更新するための個別の低減器の数は、たとえば、KPを解くための指定された計算時間(たとえば、KPを解くための所望される計算時間)に基づいて決定され得る。いくつかの実施形態では、K個の双対乗数を更新するための個別の低減器の数を決定することは、個別の低減器の数を、全体制約の数K以下となるように決定することを含む。個別の低減器の数がKである場合、K個の双対乗数の各々がそれぞれの個別の低減器によって更新され得るので、K個の双対乗数は、それぞれのK個の個別の低減器によって、独立に互いに並列に更新され得る。
1416aにおいて、収束条件が満たされるかどうかを決定する。収束条件は、たとえば、反復の最大の数、K個の双対乗数、または両方に基づいて定義され得る。たとえば、K個の双対乗数が収束した場合、または最大の数の反復が実行された場合のいずれかに、収束条件は満たされ得る。追加のまたは異なる収束条件が規定され得る。
1418aにおいて、(たとえば、K個の双対乗数に基づいて)収束条件が満たされるとの決定に応答して、K個の双対乗数に基づくN個の部分問題の各々を、再びその数の個別のソルバのうちの1つによって独立に解くことができ、ここでN個の部分問題の各々を解くことは、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量を計算することを含む。
1420aにおいて、M個の資源の各々の量を、プロセス1400aの出力として返すことができ、N人のユーザのうちの対応するユーザに配分することができる。
図14Bは、本明細書の実施形態による、L個の制約のもとでM個の資源の資源配分を実行するためのプロセス1400bの例のフローチャートである。いくつかの実施形態では、L個の制約のもとでのM個の資源の資源配分は、式(14)〜(16)によって表される整数計画(IP)問題などのIP問題によって表され得る。L個の制約のもとでのM個の資源の資源配分は、トラフィックのルーティング/管理、マーケティングキャンペーン、商品/サービスのプロモーションなどにおける資源配分などの、1つまたは複数の現実世界のシナリオを表すことができる。図4に関して上で説明されたアルゴリズム2はプロセス1400bの例である。
いくつかの実施形態では、L個の制約のもとでのM個の資源の資源配分は、スタンドアロンの問題、または、たとえば(1)〜(4)に表されるような、K個の全体制約およびL個の局所制約を受けるKPのN個の部分問題のうちの1つであり得る。いくつかの実施形態では、K個の全体制約およびL個の制約を受けるK個のプールへのN人のユーザの間でのM個の資源の資源配分を実行するプロセス1400bが、N人のユーザのうちの1人のために実行され、ここでL個の制約の各々は単一のユーザによって選択されるべきM個の資源のうちのそれぞれの最大の数の資源を制約し、K個の全体制約の各々はN人のユーザにわたって各プールに配分される資源を制限する。
プロセス1400bは、1つまたは複数のプロセッサによって実装され得る、IPソルバ(たとえば、マッパ110)を使用して実行され得る。いくつかの実施形態では、プロセス1400bは、本明細書に従って、1つまたは複数のコンピュータのシステムなどのデータ処理装置によって実行され、1つまたは複数の位置に配置され、適切にプログラムされるものとして説明される。たとえば、適切にプログラムされる図15のコンピュータシステム1500はプロセス1400bを実行することができる。
1402bにおいて、L個の制約を表すデータが受信される。いくつかの実施形態では、L個の制約の各々は、M個の資源の部分集合に対応し、たとえば式(3)に示されるように、M個の資源の部分集合の中から選択されるべき資源のそれぞれの最大の数Cを制約する。いくつかの実施形態では、L個の制約は、たとえば図5に関して説明されるような階層構造を有する。たとえば、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有しない。
いくつかの実施形態では、L個の制約を表すデータはL個のインデックス部分集合を含み、L個のインデックス部分集合の各々が、L個の制約のうちのそれぞれ1つに対応し、L個の制約のそれぞれ1つに対応するM個の資源の部分集合のインデックスを含む。たとえば、L個の制約のうちの制約lは、M個の資源の部分集合Slに対応し、部分集合Slの中から選択されるべき資源の最大の数Clを制約する。いくつかの実施形態では、部分集合Slは、制約lに対応するM個の資源の部分集合のインデックスを含み、ここでl=1,2,...,Lである。
いくつかの実施形態では、L個の制約を表すデータは、たとえば図5に関して説明されたような、有向非巡回グラフ(DAG)データ構造の中のノードによってL個の制約の各々を表すデータを含む。いくつかの実施形態では、DAGの辺は、辺の2つのノードに対応するL個の制約のうちの2つの間の関係を表す。DAGは有向閉道を有しない。
1404bにおいて、L個の制約のトポロジカル順序が決定され、トポロジカル順序はL個の制約の走査順序を定義する。いくつかの実施形態では、L個の制約のトポロジカル順序は、DAGのトポロジカル順序を決定するための既存のアルゴリズムを使用して決定される。
1406bにおいて、すべてのM個の資源が、たとえば、アルゴリズム2の410において示されるように、M個の資源の各々に対して決定変数を1(または任意の他の値)として設定することによって、初期選択として選択される。
1408bにおいて、M個の報酬を表すデータが得られ、各報酬はそれぞれM個の資源のうちの1つに対応する。いくつかの実施形態では、M個の報酬はそれぞれ、M個のコスト調整された報酬であり、M個のコスト調整された報酬の各々は、M個の資源のうちの1つが選択される場合のコストを報酬から引いたものを含む。
1410bにおいて、M個の資源が、M個の資源に対応するM個の報酬に従って非昇順でソートされる(たとえば、アルゴリズム2で420として示されるように)。
1412bにおいて、たとえば、アルゴリズム2の420〜450において示されるように、L個の制約のトポロジカル順序において各制約を走査することによって、1つまたは複数の資源が初期選択から除去される。いくつかの実施形態では、除去することは、1414bにおける、M個の資源の部分集合Slに対応し部分集合Slの中から選択されるべき資源の最大の数Clを制約する、L個の制約のうちの制約lに対して、1416bにおいて、部分集合Slの中の現在選択されている資源を決定することと(たとえば、アルゴリズム2において440として示されるように)、1418bにおいて、部分集合Slの中の現在選択されている資源の中から、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することと(たとえば、アルゴリズム2の450において示されるように、選択解除される資源の決定変数を0として更新することによって)を含む。
いくつかの実施形態では、部分集合Slの中の現在選択されている資源の中から、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することは、M個の資源の非昇順に従って部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することを含む。
1420bにおいて、L個の制約のトポロジカル順序の中のすべてのL個の制約が走査されたかどうかが決定される。走査された場合、プロセス1400bは1422bに進む。そうではない場合、プロセス1400bは1414bに戻り、L個の制約のトポロジカル順序における次の制約l=l+1に対する1つまたは複数の資源を除去する。
1422bにおいて、選択された資源は、たとえば、アルゴリズム2の460において示されるように、M個の資源の各々に対して決定変数を返し、または出力することによって、L個の制約のトポロジカル順序の中のすべてのL個の制約を走査した後で配分される。
図14Cは、本明細書の実施形態による、ナップサック問題(KP)を解くことによってN人のユーザの間でのK個のプール(たとえば、K個のナップサック)へのM個の資源の資源配分を実行するためのプロセス1400cの別の例のフローチャートである。KPは、たとえば(1)〜(4)において表されるように、K個の全体制約およびL個の全体制約を受ける。各プールは、KPにおいて記述されるようなそれぞれのナップサックに対応し得る。KPは、トラフィックのルーティング/管理、マーケティングキャンペーン、商品/サービスのプロモーションなどを含む資源配分などの、1つまたは複数の現実世界のシナリオを表すことができる。図7に関して上で説明されたアルゴリズム4は、プロセス1400cの例であり得る。
プロセス1400cは、分散型コンピューティングシステム100などの分散型コンピューティングシステムを使用して実行されることが可能であり、これはいくつかのプロセッサ(たとえば、異なるユーザにわたって分散され、または異なる場所に配置される)を含む。プロセッサの各々が、たとえば、マルチコア処理能力を活用することによって、1つまたは複数の個別のソルバとして機能し、またはそれをサポートすることができる。各々の個別のソルバは、独立に互いに並列に実行することができる。いくつかの実施形態では、個別のソルバの一部は、独立に互いに並列に実行することができるIPソルバ(マッパとも呼ばれる)110として機能することができる。いくつかの実施形態では、プロセッサのうちの1つまたは複数は、独立に互いに並列に実行することができる集約器(低減器とも呼ばれる)120として機能することができる。いくつかの実施形態では、プロセッサのうちの1つまたは複数は、双対乗数更新器(マスターノードとも呼ばれる)130として機能することができる。いくつかの実施形態では、たとえば、並列処理能力を活用してKPを解く計算時間を減らすために、異なる個別のソルバが独立に互いに並列に実行することができ、かつ異なる集約器が独立に互いに並列に実行することができる限り、単一のプロセッサが、IPソルバ、集約器、および双対乗数更新器として機能するために使用され得る。
いくつかの実施形態では、分散型コンピューティングシステムは、クラウドコンピューティングシステムとして実装され得る。いくつかの実施形態では、分散型コンピューティングシステムは、MapReduceまたは他の分散型コンピューティングフレームワークもしくはモデルを有し得る。いくつかの実施形態では、分散型コンピューティングシステムは、MPI、HADOOP、およびSPARKなどの共通の分散型プラットフォームを使用して実装され得る。いくつかの実施形態では、プロセス1400cは、本明細書に従って、1つまたは複数のコンピュータのシステムなどのデータ処理装置によって実行され、1つまたは複数の位置に配置され、適切にプログラムされるものとして説明される。たとえば、適切にプログラムされる図15のコンピュータシステム1500が、プロセス1400cを実行することができる。
1402cにおいて、KPのK個の全体制約およびKPのL個の局所制約を表すデータが受信される。いくつかの実施形態では、Lは数十億以上のオーダーである。KはLより小さい。K個の全体制約の各々が、たとえば式(2)に示されるように、2人以上のユーザにわたってM個の資源のそれぞれのプール当たりの最大のコストを制約する。L個の局所制約の各々が、たとえば式(3)に示されるように、M個の資源のユーザ当たりの選択を制約する。
1403cにおいて、KPは、たとえば式(8)〜(13)に示されるような方式で、K個の双対乗数(たとえば、λk,k=1,2,...,K)を使用して双対問題へと変換される。K個の双対乗数の各々は、K個の全体制約のそれぞれ1つに対応する。
1404cにおいて、双対問題がN個の部分問題へと分解され、N個の部分問題の各々が、たとえば式(14)〜(16)に示されるように、N人のユーザのそれぞれ1人に対応し、N人のユーザのそれぞれ1人に関するL個の局所制約を受ける。いくつかの実施形態では、Nは10億以上のオーダーである。
いくつかの実施形態では、L個の制約は、たとえば図5に関して説明されるような階層構造を有する。たとえば、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有しない。
K個の双対乗数が与えられると、N個の部分問題は、N個の部分問題の各々を解く際にK個の全体制約を考慮することなく、対応するユーザに関するL個の局所制約を独立に尊重して解かれ得る。
1406cにおいて、N個の部分問題を解くための個別のソルバ(たとえば、IPソルバ110)の数が決定される。いくつかの実施形態では、N個の部分問題を解くための個別のソルバの数を決定することは、KPを解くための指定された計算時間(たとえば、最高で数十億のユーザおよび局所制約を伴うKPの大きな規模のもとでKPを解くための所望される計算時間)に基づいて、N個の部分問題を解くための個別のソルバの数を決定することを含む。いくつかの実施形態では、N個の部分問題を解くための個別のソルバの数を決定することは、個別のソルバの数をユーザの数N以下となるように決定することを含む。個別のソルバの数がNである場合、N個の部分問題の各々がそれぞれの個別のソルバによって解かれ得るので、N個の部分問題は、独立に互いに並列に、それぞれのN個の個別のソルバによって解かれ得る。
1408cにおいて、N個の部分問題は、その数の個別のソルバにわたって分散される。たとえば、個別のソルバは、計算負荷を分散させて、複数の個別のソルバの並列処理能力を活用することによりKP全体を解く計算時間を減らすために、N個の部分問題のうちの1つまたは少数(たとえば、1、10、100、または1000のオーダーの)を配分され得る。
1410cにおいて、2回以上の反復を実行することによって、双対問題が分散型コンピューティングシステムによって解かれる。いくつかの実施形態では、1411cにおいて、1403cにおいてN個の部分問題へとKPを分解するための、K個の双対乗数の初期値の集合が決定され得る。K個の双対乗数の初期値は、たとえば、所定の値もしくはランダムな値として決定され、または、上で説明されたようなサンプリングされたデータを使用した事前解決によって推定され得る。たとえば、K個の双対乗数の初期値は、K個のサンプリングされた全体制約およびL個の局所制約のもとでの、K個のプールへのS人のユーザの間での資源配分のための、KPのサンプリングされたバージョンに基づいて計算され、S人のユーザはN人のユーザからサンプリングされ、K個のサンプリングされた全体制約の各々は、K個のプールの各々に対するS人のユーザにわたる資源のそれぞれのスケーリングダウンされた最大の総コストを制約する。
K個の双対乗数を更新することができるので、K個の双対乗数に基づいて分解されたN個の部分問題を、それに従って更新することができる。したがって、KPは、反復方式で、たとえば図7の同期座標降下(SCD)アルゴリズム(アルゴリズム4とも呼ばれる)750に示されるようなMapReduce方式で、N個の部分問題を解くことによって解かれ得る。
たとえば、1回の反復の中で、1412cにおいて、N個の部分問題の各々が、その数の個別のソルバのうちの1つによって独立に解かれる。いくつかの実施形態では、N人のユーザの各々に対応するN個の部分問題の各々を解くことは、更新された双対乗数に対応するN人のユーザの各々のM個の決定変数(たとえば、決定変数xi,j)を計算することを含み、M個の決定変数の各々は、N人のユーザの各々によってM個の資源のそれぞれ1つを選択するかどうかを示す。
いくつかの実施形態では、N個の部分問題の各々は、その数の個別のソルバまたはマッパのうちの1つによって独立に(たとえば、互いに並列に)Map関数(たとえば、752に示されるような)を実行することによって解かれる。Map関数は、Map関数710として、または別の方式で定義され得る。たとえば、N人のユーザの各々に対応するN個の部分問題の各々を解くことは、ユーザに対応する部分問題に対して、およびプールに対応する全体制約に対応する各双対乗数に対して、双対乗数の候補を計算することと、双対乗数の候補を非昇順でソートすることと、双対乗数の候補を非昇順で走査することと、双対乗数の各候補に対して、双対乗数の候補に対応するユーザのM個の決定変数を計算することと、非昇順において双対乗数の上記の候補に先行する双対乗数の候補に対応するユーザのM個の決定変数に基づく選択された資源のコストに対する相対的な、双対乗数の上記の候補に対応するユーザのM個の決定変数に基づく選択された資源の増分のコストを計算することとを含む。いくつかの実施形態では、ある双対乗数に対応するプールに対してN人のユーザにわたって選択される資源の総コストは、その双対乗数以上である双対乗数のすべての候補に対応するユーザの選択された資源の増分のコストを加算することによって計算される。
いくつかの実施形態では、双対乗数の候補を計算することは、双対乗数のM個の線形関数の対ごとの交差点を計算することを含み、双対乗数のM個の線形関数は、双対乗数が与えられたときのM個の資源のM個のコスト調整された報酬を表す。
いくつかの実施形態では、たとえば、図13に関して説明されたような技法に従って、非負の閾値が、非昇順でソートされた双対乗数の候補と、非昇順の双対乗数の候補のうちの1つに対応するプールに対するN人のユーザにわたって選択される資源のそれぞれの総コストとに基づいて計算される。いくつかの実施形態では、たとえば、図13に関して説明されたような技法に従って、非負の閾値を計算するために、非昇順でソートされた双対乗数の候補に対して補間が実行される。
いくつかの実施形態では、上で説明された微調整されたバケット化アルゴリズムなどのバケット化方式が、プロセス1400cの収束を高速化するために実行され得る。たとえば、双対乗数の候補は、複数の不均一予算へとグループ化され、複数の不均一予算の中の双対乗数のそれぞれの候補に対応するユーザの選択された資源の増分のコストの合計が計算され、非負の閾値が増分のコストの合計に基づいて計算される。
いくつかの実施形態では、その数の個別のソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、部分問題が割り当てられたソルバによってN個の部分問題の各々を独立に解くことを含む。いくつかの実施形態では、N個の部分問題の各々をその数の個別のソルバのうちの1つによって独立に解くことは、その数の個別のソルバのうちの1つによってN個の部分問題の各々を並列に解くことを含む。いくつかの実施形態では、その数の個別のソルバのうちの1つによって独立に解くことは、N個の個別のソルバのそれぞれ1つによってN個の部分問題の各々を並列に解くことを含む。いくつかの実施形態では、N個の部分問題の各々は整数計画(IP)問題である。したがって、N個の部分問題の各々をその数の個別のソルバのうちの1つによって独立に解くことは、IPソルバ(たとえば、図4に関して説明されたような階層貪欲IPソルバ)によってIP問題を独立に解くことを含む。
1414cにおいて、2人以上のユーザにわたるM個の資源のプール当たりの最大のコストを制約する、プールに対応する全体制約に対応する各双対乗数に対して、プールに対応する全体制約に対する更新された双対乗数は、たとえば、図7のアルゴリズム4の722において示されるような最小の閾値νなどの非負の閾値となるように決定される。非負の閾値は、非負の閾値より小さい双対乗数に対応するプールに対してN人のユーザにわたって選択される資源の総コストが、プール当たりの最大のコストを超えるような、かつ、非負の閾値より小さくない双対乗数に対応するプールに対してN人のユーザにわたって選択される資源の総コストが、プール当たりの最大のコストを超えないようなものであり得る。
1416cにおいて、収束条件が満たされるかどうかを決定する。収束条件は、たとえば、反復の最大の数、K個の双対乗数、または両方に基づいて定義され得る。たとえば、K個の双対乗数が収束した場合、または最大の数の反復が実行された場合のいずれかに、収束条件は満たされ得る。追加のまたは異なる収束条件が規定され得る。
1418cにおいて、(たとえば、K個の双対乗数に基づく)収束条件が満たされるとの決定に応答して、K個の双対乗数に基づくN個の部分問題の各々を、再びその数の個別のソルバのうちの1つによって独立に解くことができ、ここでN個の部分問題の各々を解くことは、K個の双対乗数に対応するN人のユーザの各々のM個の決定変数を計算することを含む。
1420cにおいて、M個の資源が、N人のユーザの各ユーザのM個の決定変数に従ってN人のユーザにわたって配分される。N人のユーザの各ユーザのM個の決定変数は、プロセス1400cの出力として返され得る。
図15は、本明細書の実施形態による、説明されたアルゴリズム、方法、関数、プロセス、フロー、およびプロシージャと関連付けられる計算機能を提供するために使用される、コンピュータ実装システム1500の例を示すブロック図を示す。図15は、本開示のある実施形態による、説明されたアルゴリズム、方法、関数、プロセス、フロー、およびプロシージャと関連付けられる計算機能を提供するために使用される、コンピュータ実装システム1500の例を示すブロック図である。示される実施形態では、システム1500はコンピュータ1502およびネットワーク1530を含む。
示されるコンピュータ1502は、サーバ、デスクトップコンピュータ、ラップトップ/ノートブックコンピュータ、ワイヤレスデータポート、スマートフォン、携帯情報端末(PDA)、タブレットコンピュータ、これらのデバイス内の1つまたは複数のプロセッサ、別のコンピューティングデバイス、または、コンピューティングデバイスの物理的もしくは仮想的な実体、もしくはコンピューティングデバイスの物理的もしくは仮想的な実態の組合せを含む、コンピューティングデバイスの組合せなどの、任意のコンピューティングデバイスを包含することが意図される。加えて、コンピュータ1502は、キーパッド、キーボード、タッチスクリーン、別の入力デバイス、または、ユーザ情報を受け入れることができる入力デバイスの組合せなどの入力デバイスと、デジタルデータ、ビジュアル、オーディオ、別のタイプの情報、もしくは複数のタイプの情報の組合せを含む、コンピュータ1502の動作と関連付けられる情報をグラフィカルタイプユーザインターフェース(UI)(GUI)もしくは他のUI上で伝える出力デバイスとを含み得る。
コンピュータ1502は、クライアント、ネットワークコンポーネント、サーバ、データベースもしくは別の持続性、別の役割、または本開示で説明される主題を実行するための役割の組合せとして、分散型コンピューティングシステムにおける役割を果たすことができる。示されるコンピュータ1502は、ネットワーク1530と通信可能に結合される。いくつかの実施形態では、コンピュータ1502の1つまたは複数の構成要素は、クラウドコンピューティングベース、ローカル、グローバル、別の環境、または環境の組合せを含む、ある環境内で動作するように構成され得る。
高水準において、コンピュータ1502は、説明された主題と関連付けられるデータおよび情報を受信し、送信し、処理し、記憶し、または管理するように動作可能な電子コンピューティングデバイスである。いくつかの実施形態によれば、コンピュータ1502はまた、アプリケーションサーバ、電子メールサーバ、ウェブサーバ、キャッシュサーバ、ストリーミングデータサーバ、別のサーバ、またはサーバの組合せを含む、サーバを含むことがあり、またはサーバと通信可能に結合されることがある。
コンピュータ1502は、ネットワーク1530を介して(たとえば、別のコンピュータ1502上で実行されるクライアントソフトウェアアプリケーションから)要求を受信し、ソフトウェアアプリケーションまたはソフトウェアアプリケーションの組合せを使用して受信された要求を処理することによって、受信された要求に応答することができる。加えて、要求はまた、内部のユーザから(たとえば、コマンドコンソールから、または別の内部アクセス方法によって)、外部もしくは第三者から、または他のエンティティ、個人、システム、もしくはコンピュータから、コンピュータ1502に送信され得る。
コンピュータ1502の構成要素の各々は、システムバス1503を使用して通信することができる。いくつかの実施形態では、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組合せを含む、コンピュータ1502の構成要素のいずれかまたはすべてが、アプリケーションプログラミングインターフェース(API)1512、サービスレイヤ1513、またはAPI1512とサービスレイヤ1513の組合せを使用して、システムバス1503を介してインターフェースすることができる。API1512は、ルーチン、データ構造、およびオブジェクトクラスの仕様を含み得る。API1512は、コンピュータ言語とは無関係であるか、またはそれに依存するかのいずれかであってよく、完全なインターフェース、単一の機能、またはAPIの集合すらも指すことがある。サービスレイヤ1513は、コンピュータ1502またはコンピュータ1502に通信可能に結合される他の構成要素(図示されていてもいなくても)にソフトウェアサービスを提供する。コンピュータ1502の機能は、サービスレイヤ1513を使用するすべてのサービス利用者に対してアクセス可能であり得る。サービスレイヤ1513によって提供されるものなどのソフトウェアサービスは、定められたインターフェースを通じて、再使用可能な定められた機能を提供する。たとえば、インターフェースは、JAVA(登録商標)、C++、別のコンピューティング言語、または、拡張マークアップ言語(XML)フォーマット、別のフォーマット、もしくはフォーマットの組合せでデータを提供する、コンピューティング言語の組合せで書かれた、ソフトウェアであり得る。コンピュータ1502の統合された構成要素として示されているが、代替的な実施形態は、コンピュータ1502の他の構成要素またはコンピュータ1502に通信可能に結合される他の構成要素(図示されていてもいなくても)との関連でスタンドアロンの構成要素として、API1512またはサービスレイヤ1513を示すことができる。その上、API1512またはサービスレイヤ1513のいずれかもしくはすべての部分は、本開示の範囲から逸脱することなく、別のソフトウェアモジュール、企業アプリケーション、またはハードウェアモジュールの、子モジュールまたはサブモジュールとして実装され得る。
コンピュータ1502はインターフェース1504を含む。単一のインターフェース1504として示されているが、具体的な需要、要望、またはコンピュータ1502の具体的な実施形態に従って、2つ以上のインターフェース1504が使用され得る。インターフェース1504は、分散型の環境においてネットワーク1530に通信可能にリンクされる別のコンピューティングシステム(図示されていてもいなくても)と通信するためにコンピュータ1502によって使用される。一般に、インターフェース1504は、ネットワーク1530と通信するように動作可能であり、ソフトウェア、ハードウェア、またはソフトウェアとハードウェアの組合せで符号化される論理を含む。より具体的には、インターフェース1504は、ネットワーク1530またはインターフェース1504のハードウェアが示されるコンピュータ1502の中および外で物理信号を通信するように動作可能であるように、通信と関連付けられる1つまたは複数の通信プロトコルをサポートするソフトウェアを含み得る。
コンピュータ1502はプロセッサ1505を含む。単一のプロセッサ1505として示されているが、具体的な需要、要望、またはコンピュータ1502の具体的な実施形態に従って、2つ以上のプロセッサ1505が使用され得る。一般に、プロセッサ1505は、コンピュータ1502の動作および本開示で説明されるような任意のアルゴリズム、方法、関数、プロセス、フロー、およびプロシージャを実行するために、命令を実行してデータを操作する。
コンピュータ1502はまた、コンピュータ1502のためのデータを保持することができるデータベース1506、ネットワーク1530に通信可能にリンクされる別の構成要素(図示されていてもいなくても)、またはコンピュータ1502と別の構成要素の組合せを含む。たとえば、データベース1506は、インメモリであってよく、従来のものであってよく、または、本開示に従ってデータを記憶する別のタイプのデータベースであってよい。いくつかの実施形態では、データベース1506は、具体的な需要、要望、またはコンピュータ1502の具体的な実施形態および望まれる機能に従って、2つ以上の異なるデータベースタイプの組合せ(たとえば、インメモリと従来のハイブリッドのデータベース)であり得る。単一のデータベース1506として示されているが、同様のまたは異なるタイプの2つ以上のデータベースが、具体的な需要、要望、またはコンピュータ1502の具体的な実施形態、および望まれる機能に従って使用され得る。データベース1506がコンピュータ1502の一体の構成要素として示されているが、代替の実施形態では、データベース1506はコンピュータ1502の外部にあり得る。ある例として、データベース1506は、KPの上で説明された全体制約1516および局所制約1518を含み得る。
コンピュータ1502はまた、コンピュータ1502のためのデータを保持することができるメモリ1507、ネットワーク1530に通信可能にリンクされる別の構成要素もしくは複数の構成要素(図示されていてもいなくても)、またはコンピュータ1502と別の構成要素の組合せを含む。メモリ1507は本開示に従ってあらゆるデータを記憶することができる。いくつかの実施形態では、メモリ1507は、具体的な需要、要望、またはコンピュータ1502の具体的な実施形態、および説明される機能に従って、2つ以上の異なるタイプのメモリの組合せ(たとえば、半導体と磁気ストレージの組合せ)であり得る。単一のメモリ1507として示されているが、2つ以上のメモリ1507または同様のタイプもしくは異なるタイプが、具体的な需要、要望、またはコンピュータ1502の具体的な実施形態、および説明される機能に従って使用され得る。メモリ1507はコンピュータ1502の一体の構成要素として示されているが、代替の実施形態では、メモリ1507はコンピュータ1502の外部にあり得る。
アプリケーション1508は、特に本開示で説明される機能に関する、具体的な需要、要望、またはコンピュータ1502の具体的な実施形態に従って機能を提供するアルゴリズムソフトウェアエンジンである。たとえば、アプリケーション1508は、1つまたは複数のコンポーネント、モジュール、またはアプリケーションとして機能することができる。さらに、単一のアプリケーション1508として示されているが、アプリケーション1508はコンピュータ1502上で複数のアプリケーション1508として実装され得る。加えて、コンピュータ1502と一体であるものとして示されているが、代替の実施形態では、アプリケーション1508はコンピュータ1502の外部にあり得る。
コンピュータ1502は電源1514も含み得る。電源1514は、ユーザにより交換可能であるか交換不可能であるかのいずれかであるように構成され得る、再充電可能なまたは再充電可能ではない電池を含み得る。いくつかの実施形態では、電源1514は電力変換または管理回路(再充電、スタンバイ、または別の電力管理機能を含む)を含み得る。いくつかの実施形態では、電源1514は、たとえばコンピュータ1502に電力供給するために、または再充電可能な電池を再充電するために、コンピュータ1502が壁のコンセントまたは別の電源に差し込まれることを可能にするための、電力プラグを含み得る。
コンピュータ1502を含むコンピュータシステムと関連付けられる、またはその外部にある、任意の数のコンピュータ1502があることがあり、各コンピュータ1502はネットワーク1530を介して通信する。さらに、「クライアント」、「ユーザ」という用語、または別の適切な技術用語が、本開示の範囲から逸脱することなく適宜交換可能に使用され得る。その上、本開示は、多数のユーザが1つのコンピュータ1502を使用できること、または1人のユーザが複数のコンピュータ1502を使用できることを企図する。
図16Aは、本明細書の実施形態による、装置1600aのモジュールの例の図である。装置1600aは、K個の全体制約およびL個の局所制約を受けるナップサック問題(KP)を解くことによってN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行するための、いくつかの個別のコンピュータ実装ソルバを含む分散型コンピューティングシステムなどの、データ処理装置の例示的な実施形態であり得る。装置1600aは上で説明された実施形態に対応することができ、装置1600aは、K個の全体制約およびL個の局所制約を表すデータを受信するための受信モジュール1601aであって、KがLより小さく、K個の全体制約の各々が2人以上のユーザにわたるM個の資源のそれぞれのプール当たりの最大のコストを制約し、L個の局所制約の各々がM個の資源のユーザ当たりの選択を制約する、受信モジュール1601aと、K個の双対乗数を使用してKPをN個の部分問題へと分解するための分解モジュール1602aであって、N個の部分問題の各々が、N人のユーザのそれぞれ1人に対応し、対応するユーザに関してL個の局所制約を受け、Nが数十億以上のオーダーであり、K個の双対乗数の各々がK個の全体制約のそれぞれ1つに対応する、分解モジュール1602aと、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定するための第1の決定モジュール1603aと、その数の個別のコンピュータ実装ソルバの間でN個の部分問題を分散させるための分散モジュール1604aと、2回以上の反復を実行することにより分散型コンピューティングシステムによってKPを解くための第1の解決モジュール1605aとを含む。第1の解決モジュール1605aはさらに、1回の反復において、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くための第1の解決サブモジュールであって、N個の部分問題の各々を解くことがN人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量を計算することを含む、第1の解決サブモジュールと、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて、K個の双対乗数を更新するための更新サブモジュールとを含む。
ある任意選択の実施形態では、Lは数十億以上のオーダーである。
ある任意選択の実施形態では、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することは、KPを解くための指定された計算時間に基づいて、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することを含み、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を並列に解くことを含む。
ある任意選択の実施形態では、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することは、個別のコンピュータ実装ソルバの数をNとして決定することを含み、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、N個の個別のコンピュータ実装ソルバのそれぞれ1つによってN個の部分問題の各々を並列に解くことを含む。
ある任意選択の実施形態では、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、整数計画(IP)問題をコンピュータ実装IPソルバによって独立に解くことを含む。
ある任意選択の実施形態では、装置1600aはさらに、収束条件が満たされるかどうかをK個の双対乗数に基づいて決定するための第2の決定モジュール1606aと、K個の双対乗数に基づく収束条件が満たされるとの決定に応答して、その数の個別のコンピュータ実装ソルバのうちの1つによってK個の双対乗数に基づいてN個の部分問題の各々を独立に解くための第2の解決モジュール1607aであって、N個の部分問題の各々を解くことが、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量を計算することを含む、第2の解決モジュール1607aと、N人のユーザのうちの対応するユーザにM個の資源の各々の量を配分するための配分モジュール1608aとを含む。
ある任意選択の実施形態では、N個の部分問題の各々を解くことはさらに、K個のプールの各々に対して、対応するユーザに配分されるべきM個の資源の各々の量に基づいて、対応するユーザによるM個の資源のプール当たりのコストを計算することを含む。
ある任意選択の実施形態では、装置1600aはさらに、1回の反復において、K個のプールの各々に対して、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいてN人のユーザにわたるM個の資源のプール当たりのコストを計算するための計算モジュールと、対応するプールに関するK個の双対乗数の各々を、対応する全体制約によって制約される対応するプールに対する2人以上のユーザにわたるM個の資源のプール当たりの最大のコストと、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて計算される対応するプールに対するN人のユーザにわたるM個の資源のプール当たりのコストとの差に基づいて更新する、更新サブモジュールとを含む。
前の実施形態において示されるシステム、装置、モジュール、またはユニットは、コンピュータチップもしくはエンティティを使用することによって実装されることが可能であり、または、ある機能を有する製品を使用することによって実装されることが可能である。典型的な実施形態のデバイスはコンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せであり得る。
装置における各モジュールの機能および役割のある実施形態のプロセスに対して、上記の方法における対応するステップのある実施形態のプロセスに対して参照を行うことができる。簡潔にするために詳細は省略される。
装置の実施形態は基本的に方法の実施形態に対応するので、関連する部分について、方法の実施形態における関連する説明に対して参照を行うことができる。前に説明された装置の実施形態は例にすぎない。別個の部分として説明されるモジュールは物理的に別個であることもないこともあり、モジュールとして表示される部分は、物理的なモジュールであることもないこともあり、1つの場所に位置していることがあり、またはいくつかのネットワークモジュール上に分散されることがある。モジュールの一部またはすべてが、本明細書の解決法の目的を達成するように実際の需要に基づいて選択され得る。当業者は、創造的な努力なしで本出願の実施形態を理解し実装することができる。
図16Aを再び参照すると、図16Aは、K個の全体制約およびL個の局所制約を受けるナップサック問題(KP)を解くことによってN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行するための、いくつかの個別のコンピュータ実装ソルバを含む分散型コンピューティングシステムなどの、データ処理装置の内部機能モジュールおよび構造を示すものとして解釈され得る。本質的な実体は電子デバイスであってよく、この電子デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を記憶するように構成されるメモリとを含む。
1つまたは複数のプロセッサは、K個の全体制約およびL個の局所制約を表すデータを受信し、KがLより小さく、K個の全体制約の各々が2人以上のユーザにわたるM個の資源のそれぞれのプール当たりの最大のコストを制約し、L個の局所制約の各々がM個の資源のユーザ当たりの選択を制約し、K個の双対乗数を使用してKPをN個の部分問題へと分解し、N個の部分問題の各々が、N人のユーザのそれぞれ1人に対応し、対応するユーザに関してL個の局所制約を受け、Nが10億以上のオーダーであり、K個の双対乗数の各々がK個の全体制約のそれぞれ1つに対応し、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定し、その数の個別のコンピュータ実装ソルバの間でN個の部分問題を分散させ、2回以上の反復を実行することにより分散型コンピューティングシステムによってKPを解くように構成される。1回の反復において、1つまたは複数のプロセッサは、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解き、N個の部分問題の各々を解くことがN人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量を計算することを含み、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて、K個の双対乗数を更新するように構成される。
任意選択で、Lは数十億以上のオーダーである。
任意選択で、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することは、KPを解くための指定された計算時間に基づいて、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することを含み、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を並列に解くことを含む。
任意選択で、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することは、個別のコンピュータ実装ソルバの数をNとして決定することを含み、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、N個の個別のコンピュータ実装ソルバのそれぞれ1つによってN個の部分問題の各々を並列に解くことを含む。
任意選択で、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、整数計画(IP)問題をコンピュータ実装IPソルバによって独立に解くことを含む。
任意選択で、1つまたは複数のプロセッサは、収束条件が満たされるかどうかをK個の双対乗数に基づいて決定し、K個の双対乗数に基づく収束条件が満たされるとの決定に応答して、その数の個別のコンピュータ実装ソルバのうちの1つによってK個の双対乗数に基づいてN個の部分問題の各々を独立に解き、N個の部分問題の各々を解くことが、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量を計算することを含み、N人のユーザのうちの対応するユーザにM個の資源の各々の量を配分するように構成される。
任意選択で、N個の部分問題の各々を解くことはさらに、K個のプールの各々に対して、対応するユーザに配分されるべきM個の資源の各々の量に基づいて、対応するユーザによるM個の資源のプール当たりのコストを計算することを含む。
任意選択で、1つまたは複数のプロセッサは、K個のプールの各々に対して、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいてN人のユーザにわたるM個の資源のプール当たりのコストを計算するように構成され、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいてK個の双対乗数を更新することは、対応するプールに関するK個の双対乗数の各々を、対応する全体制約によって制約される対応するプールに対する2人以上のユーザにわたるM個の資源のプール当たりの最大のコストと、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて計算される対応するプールに対するN人のユーザにわたるM個の資源のプール当たりのコストとの差に基づいて更新することを含む。
図16Bは、本明細書の実施形態による、装置1600bのモジュールの例の図である。装置1600bは、L個の制約のもとでM個の資源を配分するためのデータ処理装置の例示的な実施形態であり得る。装置1600bは上で説明された実施形態に対応することができ、装置1600bは、L個の制約を表すデータを受信するための受信モジュール1601bであって、L個の制約の各々が、M個の資源の部分集合に対応し、M個の資源の部分集合の中から選択されるべき資源のそれぞれの最大の数Cを制約し、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有しない、受信モジュール1601bと、L個の制約のトポロジカル順序を決定するための決定モジュール1602bであって、トポロジカル順序がL個の制約の走査順序を定義する、決定モジュール1602bと、初期選択としてすべてのM個の資源を選択するための選択モジュール1603bと、L個の制約のトポロジカル順序で各制約を走査することによって初期選択から資源を除去するための除去モジュール1604bであって、M個の資源の部分集合Slに対応し部分集合Slの中から選択されるべき資源の最大の数Clを制約する、L個の制約のうちの制約lに対して、部分集合Slの中の現在選択されている資源を決定するための決定サブモジュール1605bと、部分集合Slの中の現在選択されている資源の中から、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除するための選択解除サブモジュール1606bとをさらに含む、除去モジュール1604bと、L個の制約のトポロジカル順序ですべてのL個の制約を走査した後で選択された資源を配分するための配分モジュール1607bとを含む。
ある任意選択の実施形態では、L個の制約を表すデータはL個のインデックス部分集合を含み、L個のインデックス部分集合の各々は、L個の制約のそれぞれ1つに対応し、L個の制約のそれぞれ1つに対応するM個の資源の部分集合のインデックスを含み、部分集合Slは、制約lに対応するM個の資源の部分集合のインデックスを含む。
ある任意選択の実施形態では、L個の制約を表すデータは、有向非巡回グラフ(DAG)データ構造の中のノードによってL個の制約の各々を表すデータを含み、DAGの辺は、辺の2つのノードに対応するL個の制約のうちの2つの間の関係を表す。
ある任意選択の実施形態では、装置1600bはさらに、M個の報酬を表すデータを取得するための取得モジュールを含み、各報酬はM個の資源のうちの1つにそれぞれ対応する。
ある任意選択の実施形態では、装置1600bはさらに、L個の部分集合のトポロジカル順序でL個の部分集合の中の各部分集合を走査する前に、M個の資源に対応するM個の報酬に従って非昇順でM個の資源をソートするためのソートモジュールを含み、選択解除サブモジュールは、M個の資源の非昇順に従って、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することが可能である。
ある任意選択の実施形態では、M個の報酬はそれぞれM個のコスト調整された報酬であり、M個のコスト調整された報酬の各々は、M個の資源のうちの1つが選択される場合のコストを報酬から引いたものを含む。
ある任意選択の実施形態では、装置1600bは、K個の全体制約およびL個の制約のもとでのN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行する際に、N人のユーザのうちの1人のために実行するために使用され、L個の制約の各々が、単一のユーザによって選択されるべきM個の資源のうちのそれぞれの最大の資源の数を制約し、K個の全体制約の各々がN人のユーザにわたって各プールに配分される資源を制限する。
前の実施形態において示されるシステム、装置、モジュール、またはユニットは、コンピュータチップもしくはエンティティを使用することによって実装されることが可能であり、またはある機能を有する製品を使用することによって実装されることが可能である。典型的な実施形態のデバイスはコンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せであり得る。
装置における各モジュールの機能および役割のある実施形態のプロセスに対して、上記の方法における対応するステップのある実施形態のプロセスに対して参照を行うことができる。簡潔にするために詳細は省略される。
装置の実施形態は基本的に方法の実施形態に対応するので、関連する部分について、方法の実施形態における関連する説明に対して参照を行うことができる。前に説明された装置の実施形態は例にすぎない。別個の部分として説明されるモジュールは物理的に別個であることもないこともあり、モジュールとして表示される部分は、物理的なモジュールであることもないこともあり、1つの場所に位置していることがあり、またはいくつかのネットワークモジュール上に分散されることがある。モジュールの一部またはすべてが、本明細書の解決法の目的を達成するように実際の需要に基づいて選択され得る。当業者は、創造的な努力なしで本出願の実施形態を理解し実装することができる。
図16Bを再び参照すると、図16Bは、L個の制約のもとでM個の資源を配分するためのデータ処理装置の内部機能モジュールおよび構造を示すものとして解釈され得る。本質的な実体は電子デバイスであってよく、この電子デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を記憶するように構成されるメモリとを含む。
1つまたは複数のプロセッサは、L個の制約を表すデータを受信し、L個の制約の各々が、M個の資源の部分集合に対応し、M個の資源の部分集合の中から選択されるべき資源のそれぞれの最大の数Cを制約し、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有せず、L個の制約のトポロジカル順序を決定し、トポロジカル順序がL個の制約の走査順序を定義し、初期選択としてすべてのM個の資源を選択し、L個の制約のトポロジカル順序で各制約を走査することによって初期選択から資源を除去し、この除去が、M個の資源の部分集合Slに対応し部分集合Slの中から選択されるべき資源の最大の数Clを制約する、L個の制約のうちの制約lに対して、部分集合Slの中の現在選択されている資源を決定することと、部分集合Slの中の現在選択されている資源の中から、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することとを含み、L個の制約のトポロジカル順序ですべてのL個の制約を走査した後で選択された資源を配分するように構成される。
任意選択で、L個の制約を表すデータはL個のインデックス部分集合を含み、L個のインデックス部分集合の各々は、L個の制約のそれぞれ1つに対応し、L個の制約のそれぞれ1つに対応するM個の資源の部分集合のインデックスを含み、部分集合Slは、制約lに対応するM個の資源の部分集合のインデックスを含む。
任意選択で、L個の制約を表すデータは、有向非巡回グラフ(DAG)データ構造の中のノードによってL個の制約の各々を表すデータを含み、DAGの辺は、辺の2つのノードに対応するL個の制約のうちの2つの間の関係を表す。
任意選択で、1つまたは複数のプロセッサは、M個の報酬を表すデータを取得するように構成され、各報酬はM個の資源のうちの1つにそれぞれ対応する。
任意選択で、1つまたは複数のプロセッサは、L個の部分集合のトポロジカル順序でL個の部分集合の中の各部分集合を走査する前に、M個の資源に対応するM個の報酬に従って非昇順でM個の資源をソートするように構成され、部分集合Slの中の現在選択されている資源の中から、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することは、M個の資源の非昇順に従って、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することを含む。
任意選択で、M個の報酬はそれぞれM個のコスト調整された報酬であり、M個のコスト調整された報酬の各々は、M個の資源のうちの1つが選択される場合のコストを報酬から引いたものを含む。
任意選択で、上記の動作の一部またはすべては、K個の全体制約およびL個の制約のもとでのN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行する際に、N人のユーザのうちの1人のために実行され、L個の制約の各々が、単一のユーザによって選択されるべきM個の資源のうちのそれぞれの最大の資源の数を制約し、K個の全体制約の各々がN人のユーザにわたって各プールに配分される資源を制限する。任意選択で、Lは数十億以上のオーダーである。
図16Cは、本明細書の実施形態による、装置1600cのモジュールの例の図である。装置1600cは、K個の全体制約およびL個の局所制約を受けるナップサック問題(KP)を、いくつかの個別のコンピュータ実装ソルバを含む分散型コンピューティングシステムを使用して解くことによって、N人のユーザの間でのK個のプールへのM個の資源の資源配分を実行するための、データ処理装置の例示的な実施形態であり得る。装置1600cは上で説明された実施形態に対応することができ、装置1600cは、K個の全体制約およびL個の局所制約を表すデータを受信するための受信モジュール1601cであって、K個の全体制約の各々が2人以上のユーザにわたるM個の資源のそれぞれのプール当たりの最大のコストを制約し、L個の局所制約の各々がM個の資源のユーザ当たりの選択を制約する、受信モジュール1601cと、K個の双対乗数を使用してKPを双対問題へと変換するための変換モジュール1602cであって、K個の双対乗数の各々がK個の全体制約のうちのそれぞれ1つに対応する、変換モジュール1602cと、双対問題をN個の部分問題へと分解するための分解モジュール1603cであって、N個の部分問題の各々が、N人のユーザのそれぞれ1人に対応し、N人のユーザのそれぞれ1人に関してL個の局所制約を受ける、分解モジュール1603cと、双対問題を解く際に2回以上の反復を実行するための解決モジュール1604cと、1回の反復において、2人以上のユーザにわたるM個の資源のプール当たりの最大のコストを制約するプールに対応する全体制約に対応する各双対乗数に対して、非負の閾値より小さい双対乗数に対応するプールに対するN人のユーザにわたって選択される資源の総コストがプール当たりの最大のコストを超えるように、かつ、非負の閾値より小さくない双対乗数に対応するプールに対するN人のユーザにわたって選択される資源の総コストがプール当たりの最大のコストを超えないように、プールに対応する全体制約に対する更新された双対乗数を非負の閾値として決定するための決定モジュール1605cと、N人のユーザの各々に対応するN個の部分問題の各々を解く際に、更新された双対乗数に対応するN人のユーザの各々のM個の決定変数を計算するための計算モジュール1606cとを含み、M個の決定変数の各々は、N人の
ユーザの各々によるM個の資源のそれぞれ1つを選択するかどうかを示す。
ある任意選択の実施形態では、Nは数十億以上のオーダーであり、KはLより小さく、Lは数十億以上のオーダーである。
ある任意選択の実施形態では、L個の制約の各々は、M個の資源の部分集合に対応し、M個の資源の部分集合の間で選択されるべき資源のそれぞれの最大の数Cを制約し、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有しない。
ある任意選択の実施形態では、装置1600cはさらに、収束条件が満たされるとの決定に応答して、K個の双対乗数に対応するN人のユーザの各ユーザのM個の決定変数を計算するための別の計算モジュールと、N人のユーザの各ユーザのM個の決定変数に従ってN人のユーザの間でM個の資源を配分する配分モジュールとを含む。
ある任意選択の実施形態では、装置1600cはさらに、K個の双対乗数の初期値を決定するための別の決定モジュールを含み、K個の双対乗数の初期値は、K個のサンプリングされた全体制約およびL個の局所制約のもとでの、S人のユーザの間でのK個のプールへの資源配分のためのKPのサンプリングされたバージョンに基づいて計算され、S人のユーザはN人のユーザからサンプリングされ、K個のサンプリングされた全体制約の各々が、K個のプールの各々に対するS人のユーザにわたる資源のそれぞれのスケーリングダウンされた最大の総コストを制約する。
ある任意選択の実施形態では、N人のユーザの各々に対応するN個の部分問題の各々を解くことは、ユーザに対応する部分問題に対して、かつプールに対応する全体制約に対応する各双対乗数に対して、双対乗数の候補を計算することと、非昇順で双対乗数の候補をソートすることと、非昇順で双対乗数の候補を走査することと、双対乗数の各候補に対して、双対乗数の候補に対応するユーザのM個の決定変数を計算することと、非昇順において双対乗数の上記の候補に先行する双対乗数の候補に対応するユーザのM個の決定変数に基づく選択された資源のコストに対する相対的な、双対乗数の上記の候補に対応するユーザのM個の決定変数に基づく選択された資源の増分のコストを計算することとを含み、ある双対乗数に対応するプールに対してN人のユーザにわたって選択される資源の総コストは、その双対乗数以上である双対乗数のすべての候補に対応するユーザの選択された資源の増分のコストを加算することによって計算される。
ある任意選択の実施形態では、双対乗数の候補を計算することは、双対乗数のM個の線形関数の対ごとの交差点を計算することを含み、双対乗数のM個の線形関数は、双対乗数が与えられたときのM個の資源のM個のコスト調整された報酬を表す。
ある任意選択の実施形態では、装置1600cはさらに、非昇順でソートされた双対乗数の候補と、非昇順の双対乗数の候補のうちの1つに対応するプールに対するN人のユーザにわたって選択される資源のそれぞれの総コストとに基づいて、非負の閾値を計算するための別の計算モジュールを含む。
ある任意選択の実施形態では、装置1600cはさらに、非負の閾値を計算するために、非昇順でソートされた双対乗数の候補に対して補間を実行するための、補間モジュールを含む。
ある任意選択の実施形態では、装置1600cはさらに、双対乗数の候補を複数の不均一予算へとグループ化するためのグループ化モジュールと、複数の不均一予算の中の双対乗数のそれぞれの候補に対応するユーザの選択された資源の増分のコストの合計を計算するための別の計算モジュールと、増分のコストの合計に基づいて非負の閾値を計算するための別の計算モジュールとを含む。
前の実施形態において示されたシステム、装置、モジュール、またはユニットは、コンピュータチップもしくはエンティティを使用することによって実装されることが可能であり、または、ある機能を有する製品を使用することによって実装されることが可能である。典型的な実施形態のデバイスはコンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せであり得る。
装置における各モジュールの機能および役割のある実施形態のプロセスに対して、上記の方法における対応するステップのある実施形態のプロセスに対して参照を行うことができる。簡潔にするために詳細は省略される。
装置の実施形態は基本的に方法の実施形態に対応するので、関連する部分について、方法の実施形態における関連する説明に対して参照を行うことができる。前に説明された装置の実施形態は例にすぎない。別個の部分として説明されるモジュールは物理的に別個であることもないこともあり、モジュールとして表示される部分は、物理的なモジュールであることもないこともあり、1つの場所に位置していることがあり、またはいくつかのネットワークモジュール上に分散されることがある。モジュールの一部またはすべてが、本明細書の解決法の目的を達成するように実際の需要に基づいて選択され得る。当業者は、創造的な努力なしで本出願の実施形態を理解し実装することができる。
図16Cを再び参照すると、図16Cは、K個の全体制約およびL個の局所制約を受けるナップサック問題(KP)を解くことによってN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行するための、いくつかの個別のコンピュータ実装ソルバを含む分散型コンピューティングシステムなどの、データ処理装置の内部機能モジュールおよび構造を示すものとして解釈され得る。本質的な実体は電子デバイスであってよく、この電子デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を記憶するように構成されるメモリとを含む。
1つまたは複数のプロセッサは、K個の全体制約およびL個の局所制約を表すデータを受信し、K個の全体制約の各々が2人以上のユーザにわたるM個の資源のそれぞれのプール当たりの最大のコストを制約し、L個の局所制約の各々がM個の資源のユーザ当たりの選択を制約し、K個の双対乗数を使用してKPを双対問題へと変換し、K個の双対乗数の各々がK個の全体制約のそれぞれ1つに対応し、双対問題をN個の部分問題へと分解し、N個の部分問題の各々が、N人のユーザのそれぞれ1人に対応し、N人のユーザのそれぞれ1人に関してL個の局所制約を受け、双対問題を解く際に2回以上の反復を実行し、1回の反復において、2人以上のユーザにわたるM個の資源のプール当たりの最大のコストを制約するプールに対応する全体制約に対応する各双対除数に対して、非負の閾値より小さい双対乗数に対応するプールに対するN人のユーザにわたって選択される資源の総コストがプール当たりの最大のコストを超えるように、かつ、非負の閾値より小さくない双対乗数に対応するプールに対するN人のユーザにわたって選択される資源の総コストがプール当たり最大のコストを超えないように、プールに対応する全体制約に対する更新された双対乗数を非負の閾値として決定し、N人のユーザの各々に対応するN個の部分問題の各々を解く際に、更新された双対乗数に対応するN人のユーザの各々のM個の決定変数を計算するように構成され、M個の決定変数の各々は、N人のユーザの各々によるM個の資源のそれぞれ1つを選択するかどうかを示す。
任意選択で、Nは数十億以上のオーダーであり、KはLより小さく、Lは数十億以上のオーダーである。
任意選択で、L個の制約の各々は、M個の資源の部分集合に対応し、M個の資源の部分集合の間で選択されるべき資源のそれぞれの最大の数Cを制約し、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有しない。
任意選択で、1つまたは複数のプロセッサは、収束条件が満たされるとの決定に応答して、K個の双対乗数に対応するN人のユーザの各ユーザのM個の決定変数を計算し、N人のユーザの各ユーザのM個の決定変数に従ってN人のユーザの間でM個の資源を配分するように構成される。
任意選択で、1つまたは複数のプロセッサは、K個の双対乗数の初期値を決定するように構成され、K個の双対乗数の初期値は、K個のサンプリングされた全体制約およびL個の局所制約のもとでの、S人のユーザの間でのK個のプールへの資源配分のためのKPのサンプリングされたバージョンに基づいて計算され、S人のユーザはN人のユーザからサンプリングされ、K個のサンプリングされた全体制約の各々が、K個のプールの各々に対するS人のユーザにわたる資源のそれぞれのスケーリングダウンされた最大の総コストを制約する。
任意選択で、N人のユーザの各々に対応するN個の部分問題の各々を解くことは、ユーザに対応する部分問題に対して、かつプールに対応する全体制約に対応する各双対乗数に対して、双対乗数の候補を計算することと、非昇順で双対乗数の候補をソートすることと、非昇順で双対乗数の候補を走査することと、双対乗数の各候補に対して、双対乗数の候補に対応するユーザのM個の決定変数を計算することと、非昇順において双対乗数の上記の候補に先行する双対乗数の候補に対応するユーザのM個の決定変数に基づく選択された資源のコストに対する相対的な、双対乗数の上記の候補に対応するユーザのM個の決定変数に基づく選択された資源の増分のコストを計算することとを含み、ある双対乗数に対応するプールに対してN人のユーザにわたって選択される資源の総コストは、その双対乗数以上である双対乗数のすべての候補に対応するユーザの選択された資源の増分のコストを加算することによって計算される。
任意選択で、双対乗数の候補を計算することは、双対乗数のM個の線形関数の対ごとの交差点を計算することを含み、双対乗数のM個の線形関数は、双対乗数が与えられたときのM個の資源のM個のコスト調整された報酬を表す。
任意選択で、1つまたは複数のプロセッサは、非昇順でソートされた双対乗数の候補と、非昇順の双対乗数の候補のうちの1つに対応するプールに対するN人のユーザにわたって選択される資源のそれぞれの総コストとに基づいて、非負の閾値を計算するように構成される。
任意選択で、1つまたは複数のプロセッサは、非負の閾値を計算するために、非昇順でソートされた双対乗数の候補に対して補間を実行するように構成される。
任意選択で、1つまたは複数のプロセッサは、双対乗数の候補を複数の不均一予算へとグループ化し、複数の不均一予算の中の双対乗数のそれぞれの候補に対応するユーザの選択された資源の増分のコストの合計を計算し、増分のコストの合計に基づいて非負の閾値を計算するように構成される。
本明細書で説明される技法は、1つまたは複数の技術的効果を生み出す。いくつかの実施形態では、10億の規模の現実世界のナップサック問題(たとえば、数十億の決定変数および制約を伴う)を解くことが可能な分散型システムが説明される。分散型システムは、KPのわずかに一般化された定式化に基づいて開発されるので、KPの他の変形を解くために適用され得る。局所制約を導入し、それらを全体制約とは別に扱うことによって、全体制約を満たすことの複雑さを増すことなく、資源の各ユーザに対して柔軟なビジネス上の要件を課すことができる。
ある例として、説明される技法は、ユーザ満足度などのビジネス上の尺度を犠牲にすることなく、各ユーザに限られた資源を効率的に配分するための最適化問題を解くことができる。ある使用事例の1つの例は、数億人のユーザを標的とするマーケティングキャンペーンである。各キャンペーンは、全体の資源の制限、ならびに各プロモーションチャネルに対する別個の資源の制限を有し得る。キャンペーン運営の性質に応じて、ここで言及される資源は、金銭的および非金銭的なプロモーションなどの、柔軟な形態であり得る。非金銭的な資源制約の一例は、マーケティングイベントに配分されるモバイルアプリのページビューの総数が限られることがあるというものである。いくつかの実施形態では、個々のユーザがユーザごとの局所制約を有し得る。たとえば、標的のユーザは、2つより多くのプロモーションチャネルに参加することができない。いくつかの実施形態では、決定変数と局所制約の両方が10億のレベルに到達することがあり、一方で全体制約の数は100前後であることが多い。
本明細書はまた、階層構造を有する制約のもとでIP問題を解くための、貪欲アルゴリズムおよびコンピュータ実装ソルバを説明する。説明される貪欲アルゴリズムおよびコンピュータ実装ソルバは、制約の階層構造を活用し、たとえば多項式時間の複雑さで、IP問題をより効率的に解くことができる。貪欲アルゴリズムおよびコンピュータ実装ソルバは、IP問題によってより効率的にモデル化または表現され得る、資源配分、商品/サービスのプロモーション、およびマーケティングなどの、現実世界のシナリオに対する解を見つけるために使用され得る。
本明細書はさらに、双対乗数を更新するための同期座標降下(SCD)アルゴリズムを説明する。特に大規模なKPに対しては現実には面倒であり、または計算量が多いことがある、手動でまたはプログラムに従ってのいずれかで選ばれる必要があるハイパーパラメータαを必要とする既存の更新アルゴリズムと異なり、SCDアルゴリズムは、そのようなハイパーパラメータなしで実装できるので、計算効率を改善し、計算負荷を低減する。いくつかの実施形態では、SCDアルゴリズムは制約の違反をより起こしにくいので、背後にある最適化問題に対するより良い解を提供する。
いくつかの実施形態では、SCDアルゴリズムは、MapReduceまたは他の分散型コンピューティングフレームワークもしくはモデルを使用して、分散型システムにおいて使用され得る。分散型SCDアルゴリズムは、MPI、HADOOP、およびSPARKなどの共通の分散型プラットフォームを使用して実装され得る。
いくつかの実施形態では、説明される技法は、大規模な非線形問題を最適化するために一般化され得る。現在定式化されているような目的関数は、決定変数xi,jに関して線形である。論じられる分散型解決フレームワークは、決定変数(または決定変数のユーザ)に関して分解可能である限り、非線形の目的関数を最適化するように拡張され得る。
本主題の説明される実施形態は、1つまたは複数の特徴を、単独でまたは組合せで含み得る。たとえば、第1の実施形態は、いくつかの個別のコンピュータ実装ソルバを含む分散型コンピューティングシステムを使用してナップサック問題(KP)を解くことによってN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行するためのコンピュータ実装方法であり、KPはK個の全体制約およびL個の局所制約を受ける。この方法は、K個の全体制約およびL個の局所制約を表すデータを受信するステップであって、KがLより小さく、K個の全体制約の各々が2人以上のユーザにわたるM個の資源のそれぞれのプール当たりの最大のコストを制約し、L個の局所制約の各々がM個の資源のユーザ当たりの選択を制約する、ステップと、K個の双対乗数を使用してKPをN個の部分問題へと分解するステップであって、N個の部分問題の各々が、N人のユーザのそれぞれ1人に対応し、対応するユーザに関してL個の局所制約を受け、Nが数十億以上のオーダーであり、K個の双対乗数の各々がK個の全体制約のそれぞれ1つに対応する、ステップと、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定するステップと、各部分問題をそれぞれのコンピュータ実装ソルバに割り当てることによってその数の個別のコンピュータ実装ソルバの間でN個の部分問題を分散させるステップと、2回以上の反復を実行することにより分散型コンピューティングシステムによってKPを解くステップとを含み、この方法は、1回の反復において、部分問題が割り当てられたコンピュータ実装ソルバによってN個の部分問題の各々を独立に解くステップであって、N個の部分問題の各々を解くステップが、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量を計算するステップを含む、ステップと、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて、K個の双対乗数を更新するステップとを含む。
前述のおよび他の説明される実施形態は各々、任意選択で、以下の特徴のうちの1つまたは複数を含み得る。
以下の特徴のうちのいずれとも組み合わせることが可能な第1の特徴であって、Lは数十億以上のオーダーである。
以下の特徴のうちのいずれとも組み合わせることが可能な第2の特徴であって、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することが、KPを解くための指定された計算時間に基づいて、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することを含み、部分問題が割り当てられたコンピュータ実装ソルバによってN個の部分問題の各々を独立に解くことは、N個の部分問題のうちの2つ以上が割り当てられたそれぞれのコンピュータ実装ソルバによってN個の部分問題のうちの2つ以上を並列に解くことを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第3の特徴であって、N個の部分問題を解くための個別のコンピュータ実装ソルバの数を決定することが、個別のコンピュータ実装ソルバの数をNとして決定することを含み、その数の個別のコンピュータ実装ソルバのうちの1つによってN個の部分問題の各々を独立に解くことは、N個の個別のコンピュータ実装ソルバのそれぞれ1つによってN個の部分問題の各々を並列に解くことを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第4の特徴であって、部分問題が割り当てられたコンピュータ実装ソルバによってN個の部分問題の各々を独立に解くことは、整数計画(IP)問題をコンピュータ実装IPソルバによって独立に解くことを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第5の特徴はさらに、K個の双対乗数に基づいて収束条件が満たされるかどうかを決定することと、K個の双対乗数に基づく収束条件が満たされるとの決定に応答して、その数の個別のコンピュータ実装ソルバのうちの1つによってK個の双対乗数に基づいてN個の部分問題の各々を独立に解くことであって、N個の部分問題の各々を解くことが、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量を計算することを含む、解くことと、N人のユーザのうちの対応するユーザにM個の資源の各々の量を配分することとを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第6の特徴であって、N個の部分問題の各々を解くことはさらに、K個のプールの各々に対して、対応するユーザに配分されるべきM個の資源の各々の量に基づいて、対応するユーザによるM個の資源のプール当たりのコストを計算することを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第7の特徴であって、1回の反復において、方法はさらに、K個のプールの各々に対して、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいてN人のユーザにわたるM個の資源のプール当たりのコストを計算することを含み、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいてK個の双対乗数を更新することは、対応するプールに関するK個の双対乗数の各々を、対応する全体制約によって制約される対応するプールに対する2人以上のユーザにわたるM個の資源のプール当たりの最大のコストと、N人のユーザのうちの対応するユーザに配分されるべきM個の資源の各々の量に基づいて計算される対応するプールに対するN人のユーザにわたるM個の資源のプール当たりのコストとの差に基づいて更新することを含む。
たとえば、第2の実施形態は、L個の制約のもとでM個の資源を配分するためのコンピュータ実装方法であり、この方法は、L個の制約を表すデータを受信するステップであって、L個の制約の各々が、M個の資源の部分集合に対応し、M個の資源の部分集合の中から選択されるべき資源のそれぞれの最大の数Cを制約し、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有しない、ステップと、L個の制約のトポロジカル順序を決定するステップであって、トポロジカル順序がL個の制約の走査順序を定義する、ステップと、初期選択としてすべてのM個の資源を選択するステップと、L個の制約のトポロジカル順序で各制約を走査することによって初期選択から資源を除去するステップであって、M個の資源の部分集合Slに対応し部分集合Slの中から選択されるべき資源の最大の数Clを制約する、L個の制約のうちの制約lに対して、部分集合Slの中の現在選択されている資源を決定するステップと、部分集合Slの中の現在選択されている資源の中から、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除するステップとを含む、ステップと、L個の制約のトポロジカル順序ですべてのL個の制約を走査した後で選択された資源を配分するステップとを含む。
前述のおよび他の説明された実施形態は各々、任意選択で、以下の特徴のうちの1つまたは複数を含み得る。
以下の特徴のうちのいずれとも組み合わせることが可能な第1の特徴であって、L個の制約を表すデータがL個のインデックス部分集合を含み、L個のインデックス部分集合の各々が、L個の制約のそれぞれ1つに対応し、L個の制約のそれぞれ1つに対応するM個の資源の部分集合のインデックスを含み、部分集合Slは、制約lに対応するM個の資源の部分集合のインデックスを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第2の特徴であって、L個の制約を表すデータが、有向非巡回グラフ(DAG)データ構造の中のノードによってL個の制約の各々を表すデータを含み、DAGの辺は、辺の2つのノードに対応するL個の制約のうちの2つの間の関係を表す。
以下の特徴のうちのいずれとも組み合わせることが可能な第3の特徴はさらに、M個の報酬を表すデータを取得することを含み、各報酬はM個の資源のうちの1つにそれぞれ対応する。
以下の特徴のうちのいずれとも組み合わせることが可能な第4の特徴はさらに、L個の部分集合のトポロジカル順序でL個の部分集合の中の各部分集合を走査する前に、M個の資源に対応するM個の報酬に従って非昇順でM個の資源をソートすることを含み、部分集合Slの中の現在選択されている資源の中から、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することは、M個の資源の非昇順に従って、部分集合Slの中の現在選択されている資源の中で上位Cl個の報酬を有するCl個の資源のうちの1つではないあらゆる資源を選択解除することを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第5の特徴であって、M個の報酬がそれぞれM個のコスト調整された報酬であり、M個のコスト調整された報酬の各々が、M個の資源のうちの1つが選択される場合のコストを報酬から引いたものを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第6の特徴であって、方法は、K個の全体制約およびL個の制約のもとでのN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行する際に、N人のユーザのうちの1人のために実行され、L個の制約の各々が、単一のユーザによって選択されるべきM個の資源のうちのそれぞれの最大の資源の数を制約し、K個の全体制約の各々がN人のユーザにわたって各プールに配分される資源を制限する。
たとえば、第3の実施形態は、資源配分を実行するためのコンピュータ実装方法であり、この方法は、K個の全体制約およびL個の局所制約を受けるナップサック問題(KP)を解くことによってN人のユーザの間でのK個のプールへのM個の資源の資源配分を実行するための、いくつかの個別のコンピュータ実装ソルバを含む分散型コンピューティングシステムを使用するステップと、K個の全体制約およびL個の局所制約を表すデータを受信するステップであって、K個の全体制約の各々が2人以上のユーザにわたるM個の資源のそれぞれのプール当たりの最大のコストを制約し、L個の局所制約の各々がM個の資源のユーザ当たりの選択を制約する、ステップと、K個の双対乗数を使用してKPを双対問題へと変換するステップであって、K個の双対乗数の各々がK個の全体制約のそれぞれ1つに対応する、ステップと、双対問題をN個の部分問題へと分解するステップであって、N個の部分問題の各々が、N人のユーザのそれぞれ1人に対応し、N人のユーザのそれぞれ1人に関してL個の局所制約を受ける、ステップと、双対問題を解く際に2回以上の反復を実行するステップであって、1回の反復において、2人以上のユーザにわたるM個の資源のプール当たりの最大のコストを制約するプールに対応する全体制約に対応する各双対除数に対して、非負の閾値より小さい双対乗数に対応するプールに対するN人のユーザにわたって選択される資源の総コストがプール当たりの最大のコストを超えるように、かつ、非負の閾値より小さくない双対乗数に対応するプールに対するN人のユーザにわたって選択される資源の総コストがプール当たりの最大のコストを超えないように、プールに対応する全体制約に対する更新された双対乗数が非負の閾値として決定される、ステップと、N人のユーザの各々に対応するN個の部分問題の各々を解く際に、更新された双対乗数に対応するN人のユーザの各々のM個の決定変数を計算するステップとを含み、M個の決定変数の各々は、N人のユーザの各々によるM個の資源のそれぞれ1つを選択するかどうかを示す。
前述のおよび他の説明された実施形態は各々、任意選択で、以下の特徴のうちの1つまたは複数を含み得る。
以下の特徴のうちのいずれとも組み合わせることが可能な第1の特徴であって、Nが数十億以上のオーダーであり、KがLより小さく、Lが数十億以上のオーダーである。
以下の特徴のうちのいずれとも組み合わせることが可能な第2の特徴であって、L個の制約の各々が、M個の資源の部分集合に対応し、M個の資源の部分集合の間で選択されるべき資源のそれぞれの最大の数Cを制約し、L個の制約のうちの第1の制約に対応する部分集合がL個の制約のうちの第2の制約に対応する他の部分集合の部分集合である限り、第1の制約に対応するいずれの部分集合も、第2の制約に対応する任意の他の部分集合と共通の資源を有しない。
以下の特徴のうちのいずれとも組み合わせることが可能な第3の特徴はさらに、収束条件が満たされるとの決定に応答して、K個の双対乗数に対応するN人のユーザの各ユーザのM個の決定変数を計算することと、N人のユーザの各ユーザのM個の決定変数に従ってN人のユーザの間でM個の資源を配分することとを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第4の特徴はさらに、K個の双対乗数の初期値を決定することを含み、K個の双対乗数の初期値は、K個のサンプリングされた全体制約およびL個の局所制約のもとでの、S人のユーザの間でのK個のプールへの資源配分のためのKPのサンプリングされたバージョンに基づいて計算され、S人のユーザはN人のユーザからサンプリングされ、K個のサンプリングされた全体制約の各々が、K個のプールの各々に対するS人のユーザにわたる資源のそれぞれのスケーリングダウンされた最大の総コストを制約する。
以下の特徴のうちのいずれとも組み合わせることが可能な第5の特徴であって、N人のユーザの各々に対応するN個の部分問題の各々を解くことが、ユーザに対応する部分問題に対して、かつプールに対応する全体制約に対応する各双対乗数に対して、双対乗数の候補を計算することと、非昇順で双対乗数の候補をソートすることと、非昇順で双対乗数の候補を走査することと、双対乗数の各候補に対して、双対乗数の候補に対応するユーザのM個の決定変数を計算することと、非昇順において双対乗数の上記の候補に先行する双対乗数の候補に対応するユーザのM個の決定変数に基づく選択された資源のコストに対する相対的な、双対乗数の上記の候補に対応するユーザのM個の決定変数に基づく選択された資源の増分のコストを計算することとを含み、ある双対乗数に対応するプールに対してN人のユーザにわたって選択される資源の総コストは、その双対乗数以上である双対乗数のすべての候補に対応するユーザの選択された資源の増分のコストを加算することによって計算される。
以下の特徴のうちのいずれとも組み合わせることが可能な第6の特徴であって、双対乗数の候補を計算することは、双対乗数のM個の線形関数の対ごとの交差点を計算することを含み、双対乗数のM個の線形関数は、双対乗数が与えられたときのM個の資源のM個のコスト調整された報酬を表す。
以下の特徴のうちのいずれとも組み合わせることが可能な第7の特徴はさらに、非昇順でソートされた双対乗数の候補と、非昇順の双対乗数の候補のうちの1つに対応するプールに対するN人のユーザにわたって選択される資源のそれぞれの総コストとに基づいて、非負の閾値を計算することを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第8の特徴はさらに、非負の閾値を計算するために、非昇順でソートされた双対乗数の候補に対して補間を実行することを含む。
以下の特徴のうちのいずれとも組み合わせることが可能な第9の特徴はさらに、双対乗数の候補を複数の不均一予算へとグループ化することと、複数の不均一予算の中の双対乗数のそれぞれの候補に対応するユーザの選択された資源の増分のコストの合計を計算することと、増分のコストの合計に基づいて非負の閾値を計算することとを含む。
本主題の実施形態および本明細書で説明される活動および動作は、デジタル電子回路において、有形に具現化されるコンピュータソフトウェアもしくはファームウェアにおいて、本明細書で開示される構造およびそれらの構造的な等価物を含むコンピュータハードウェアにおいて、または、これらのうちの1つまたは複数の組合せにおいて実施され得る。本明細書で説明される主題の実施形態は、たとえばデータ処理装置による実行のために、またはデータ処理装置の動作を制御するために、コンピュータプログラム担体上に符号化される、1つまたは複数のコンピュータプログラムとして、たとえばコンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。たとえば、コンピュータプログラム担体は、命令が符号化または記憶されている1つまたは複数のコンピュータ可読記憶媒体を含み得る。担体は、磁気ディスク、磁気光学ディスク、または光学ディスク、ソリッドステートドライブ、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、または他のタイプの媒体などの、有形な非一時的コンピュータ可読媒体であり得る。代わりに、または加えて、担体は、人工的に生成された伝播信号、たとえば、データ処理装置による実行のための適切な受信機装置への送信のために情報を符号化するために生成される、機械で生成された電気信号、光学信号、または電磁気信号であり得る。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはこれらの1つまたは複数の組合せであってよく、またはそれらの一部であってよい。コンピュータ記憶媒体は伝播信号ではない。
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも呼ばれることがあり、または説明されることがあるコンピュータプログラムは、コンパイル型言語もしくはインタプリタ型言語、または宣言型言語もしくは手続き型言語を含む、任意の形式のプログラミング言語で書かれてよく、スタンドアロンプログラムとして、または、モジュール、コンポーネント、エンジン、サブルーチン、もしくはコンピューティング環境における実行に適した他のユニットとしてを含む、任意の形式で展開されてよく、この環境は、1つまたは複数の位置においてデータ通信ネットワークによって相互接続される1つまたは複数のコンピュータを含み得る。
コンピュータプログラムは、ファイルシステムの中のファイルに対応することがあるが、そうである必要はない。コンピュータプログラムは、他のプログラムまたはデータ、たとえばマークアップ言語文書に記憶される1つまたは複数のスクリプトを保持するファイルの一部分に、対象のプログラムに専用の単一のファイルに、または、複数の協調したファイル、たとえば1つまたは複数のモジュール、サブプログラム、またはコードの部分を記憶するファイルに、記憶され得る。
コンピュータプログラムの実行のためのプロセッサは、例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサを含む。一般に、プロセッサは、実行のためのコンピュータプログラムの命令、ならびにプロセッサに結合された非一時的コンピュータ可読媒体からのデータを受け取る。
「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。データ処理装置は、専用の論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィクス処理装置)を含み得る。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはこれらの1つまたは複数の組合せからなるコードを含み得る。
本明細書で説明されるプロセスおよび論理フローは、入力データに対して操作して出力を生成することによって、動作を実行するように1つまたは複数のコンピュータプログラムを実行する、1つまたは複数のコンピュータまたはプロセッサによって実行され得る。このプロセスおよび論理フローはまた、専用の論理回路、たとえば、FPGA、ASIC、もしくはGPUによって、または、専用の論理回路と1つまたは複数のプログラムされたコンピュータの組合せによって実行され得る。
コンピュータプログラムの実行に適したコンピュータは、汎用マイクロプロセッサもしくは専用マイクロプロセッサもしくは両方、または任意の他の種類の中央処理装置に基づき得る。一般に、中央処理装置は、読取り専用メモリまたはランダムアクセスメモリまたは両方から、命令およびデータを受信する。コンピュータの要素は、命令を実行するための中央処理装置と、命令およびデータを記憶するための1つまたは複数のメモリデバイスとを含み得る。中央処理装置およびメモリは、専用の論理回路によって補助され、またはそれに組み込まれ得る。
一般に、コンピュータはまた、1つまたは複数の記憶デバイスを含み、または、それからデータを受信し、またはそれにデータを転送するように動作可能に結合される。記憶デバイスは、たとえば、磁気ディスク、磁気光学ディスク、または光学ディスク、ソリッドステートドライブ、または任意の他のタイプの非一時的コンピュータ可読媒体であり得る。しかしながら、コンピュータはそのようなデバイスを有する必要はない。したがって、コンピュータは、ローカルおよび/またはリモートにある1つまたは複数のメモリなどの1つまたは複数の記憶デバイスに結合され得る。たとえば、コンピュータは、コンピュータの一体の構成要素である1つまたは複数のローカルメモリを含むことがあり、またはコンピュータは、クラウドネットワークの中にある1つまたは複数のリモートメモリに結合されることがある。その上、コンピュータは、いくつか挙げると、別のデバイス、たとえば、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記憶デバイス、たとえばユニバーサルシリアルバス(USB)フラッシュドライブに組み込まれ得る。
構成要素は、直接、または1つまたは複数の中間構成要素を介してのいずれかで、互いに電気的もしくは光学的に接続されるなど、通信可能であることによって互いに「結合」され得る。構成要素はまた、構成要素のうちの1つが他の構成要素と一体である場合、互いに「結合」され得る。たとえば、プロセッサと一体化される記憶構成要素(たとえば、L2キャッシュ構成要素)はプロセッサに「結合」される。
ユーザとの対話を可能にするために、本明細書で説明される主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、たとえばLCD(液晶ディスプレイ)モニタと、ユーザがそれによってコンピュータに入力を提供できる入力デバイス、たとえば、キーボードおよびポインティングデバイス、たとえばマウス、トラックボール、またはタッチパッドとを有する、コンピュータ上で実装され、またはそれと通信するように構成され得る。ユーザとの対話を可能にするために、他の種類のデバイスも使用され得る。たとえば、ユーザに提供されるフィードバックは、任意の形式の感覚フィードバック、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックであってよく、ユーザからの入力は、音響入力、発話入力、または触覚入力を含む任意の形式で受け取られ得る。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信しそれから文書を受信することによって、たとえば、ウェブブラウザから受信された要求に応答してユーザのデバイス上のウェブブラウザにウェブページを送信することによって、または、ユーザのデバイス、たとえばスマートフォンまたは電子タブレット上で実行されるアプリと対話することによって、ユーザと対話することができる。また、コンピュータは、個人デバイス、たとえばメッセージングアプリケーションを実行しているスマートフォンにテキストメッセージまたは他の形式のメッセージを送信し、返信としてユーザからの応答メッセージを受信することによって、ユーザと対話することができる。
本明細書は、システム、装置およびコンピュータプログラムの構成要素に関連して「ように構成される」という用語を使用する。1つまたは複数のコンピュータのシステムが特定の動作または活動を実行するように構成されることは、動作するとシステムにその動作または活動を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せが、システムにインストールされていることを意味する。1つまたは複数のコンピュータプログラムが特定の動作または活動を実行するように構成されることは、1つまたは複数のプログラムが、データ処理装置によって実行されると、装置にその動作または活動を実行させる命令を含むことを意味する。専用の論理回路が特定の動作または活動を実行するように構成されることは、動作または活動を実行する電子論理回路を回路が有することを意味する。
本明細書は多数の具体的な実施形態の詳細を含むが、これらは、特許請求の範囲自体によって定められる、特許請求されるものの範囲に対する制限として解釈されるべきではなく、むしろ、特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。別個の実施形態の文脈で本明細書で説明されるいくつかの特徴は、単一の実施形態において組合せで実現されてもよい。逆に、単一の実施形態の文脈で説明される様々な特徴は、複数の実施形態において別々に、または任意の適切な部分組合せで実現されてもよい。その上、特徴は、ある組合せで活動するものとして上で説明されることがあり、最初はそのように特許請求されることすらあるが、特許請求される組合せからの1つまたは複数の特徴は、いくつかの場合にはその組合せから削除されてよく、特許請求の範囲は、部分組合せまたは部分組合せの変形を対象とすることがある。
同様に、動作は、特定の順序で図面において図示され、特許請求の範囲に記載されるが、これは、望ましい結果を達成するために、そのような動作が示される特定の順序で実行されること、もしくは連続的な順序で実行されること、またはすべての示される動作が実行されることを要求するものとして理解されるべきではない。いくつかの状況では、マルチタスキング処理および並列処理が有利であり得る。その上、上で説明された実施形態における様々なシステムモジュールおよびコンポーネントの分離は、そのような分離をすべての実施形態において要求するものとして理解されるべきではなく、説明されるプログラムコンポーネントおよびシステムは一般に、単一のソフトウェア製品において一緒に統合され、または複数のソフトウェア製品へとパッケージングされ得ることを理解されたい。
本主題の特定の実施形態が説明された。他の実施形態が以下の特許請求の範囲内にある。たとえば、特許請求の範囲に記載される活動は、異なる順序で実行されてよく、それでも望ましい結果を達成することができる。一例として、添付の図面に図示されるプロセスは、望ましい結果を達成するために、必ずしも示される特定の順序または連続的な順序を必要としない。いくつかの場合、マルチタスキング処理および並列処理が有利であり得る。