問題タブ [lpsolve]
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.
r - 文字と列の合計制約を使用した R での lpSolve
部屋のリスト、部屋の最大平方フィート、プログラム、プログラムの最大平方フィート、および部屋が意図したプログラムの使用にどれだけ一致するか (一致数) の値があります。助けを借りて、部屋ごとに 1 つのプログラムのマッチ数と平方フィートの使用を最大化することができました。ただし、この分析をさらに一歩進めて、同じ部屋で複数のプログラムを許可したいと思います。一致数が最も高い場合は、倍数が平方フィートの要件内に収まる限り、同じプログラムの倍数を許可します。さらに、lpSolve全体に、建物全体で「x」個のオフィス、「y」個のスタジオなどのみが必要であることを伝えたいと思います。これまでのデータとコードは次のとおりです。
さて、私の質問は、ソルバーが平方フィートの使用を最大化し、各部屋 (列) 内で # を一致させ、同じプログラムの複数またはプログラムの組み合わせでこれを達成できるようにするにはどうすればよいかということです。「mod」の「<= 1」の制限を解除する必要があることはわかっていますが、各部屋で、そして最終的には全体で最適なものを見つける方法がわかりません。
部屋 [,1] の解決策は次のとおりです。
そして、部屋内に 11 の密閉型オフィスを配置しようとします。これは、合計 12 の一致に対して、1 つの共同スペース (8 一致) および 1 つのストレージ/アーカイブ (4 一致) よりもはるかに高い最適一致 # を獲得します。
これは、ソリューション マトリックス内の特定のプログラムの総数を制限するという次の質問につながります。私はそれが何らかの種類を含むと仮定します
しかし、それを制限する方法もわかりません。これらの数値は、すべてのプログラムで異なります。
ご協力いただきありがとうございます。不明な点がございましたら、お気軽にお問い合わせください。
更新: 制約
- 各部屋の一致数 (obj.vals) を最大化します。
- プログラムを最大化します。各部屋のサイズは平方フィートです。サイズは平方フィートです。これを行うには、同じプログラムを複数回使用するか (5 x 密閉型オフィス)、またはプログラムを組み合わせます (1 つのコラボレーティブ スペースと 1 つのパフォーマンス)。
- ソリューションで返されるプログラムの数を制限または強制します。プログラムは、すべての部屋でそのプログラムに提供する最大数を超えない限り、部屋間で分割できます。(全 28 列で選択できるのは、5 つの閉鎖されたオフィス、8 つのスタジオ/教室、1 つのファブリケーションなどのみです。
r - lpsolveがRでlpモデルを出力しない
R での LP モデリングは初めてです。lpSolveAPI を使用しています。2 つの決定変数を使用して小さな例を試してモデルを印刷すると、完全なモデルが印刷されます。
しかし、25 個の決定変数を使用してモデルを試し、いくつかの制約を追加した後、モデルを印刷しようとすると、次のように表示されます。
より大きなモデルを表示する方法を提案してください。
r - lpSolveで重量制限を変更するには?
株式データ間のベンチマークに CCR データ包絡分析モデルを適用しています。そのために、ここで公開されている DEA の論文から R コードを実行しています。このドキュメントでは、lpSolve を使用して線形問題を解きます。lpSolve のドキュメントはこちらです。
このドキュメントには、以下のモデルを R で実装する方法についての段階的な説明が含まれています。
背景情報:
Data Envelopment Analysis (=DEA) は、複数のデータ入力を複数のデータ出力に変換する意思決定ユニットと呼ばれる一連のエンティティのパフォーマンスを評価するためのデータ指向のアプローチです。DEA は、意思決定ユニット (DMU) のパフォーマンスを評価および比較するために使用されます。効率フロンティアへの近さを考慮して、生産単位の相対的な効率を決定することによって。
評価する DMU が n 個あると仮定します。各 DMU は、さまざまな量のさまざまな入力を消費して、さまざまな出力を生成します。具体的には、入力量を消費し、出力量を生成します。さらに , ≥ 0 であり、各 DMU には少なくとも 1 つの正の入力値と 1 つの正の出力値があると仮定します。CCR モデルの目的は、線形計画法を使用して重み を決定し、各意思決定ユニットの複合効率を最大化することです。これは次の比率で定義されます。
これは、次のような線形問題に変わります。
応用:
この効率モデルを株式データの CAPM リスク要因に適用しています。
5入力-1出力の場合です
ここでの目的は、分析される各アセットの「最適な」重みのセット (1、1...5) を見つけることです。ここで「最良」という用語は、これらの重みがすべての DMU/株式 (1...10) のインプットとアウトプットに割り当てられたときに、上記の比率が他のすべての比率と比較して最大になることを意味するために使用されます。
これは、すべての値が 0 から 1 の間にあるように標準化された生のサンプル z スコア データです。
上記のデータを、冒頭で述べた論文から取得した R コードで実行します。データ フレームからの切片変数testdfst
は計算から除外されることに注意してください。
コードの説明:
私の問題に関連している可能性があります: z >= 0 の部分に注意してください。私が間違っている場合は訂正してください。ただし、この制限はコードに直接含まれていないため、lpSolve はデフォルトでこれを使用する必要がありますか? この部分を正しく識別できれば、問題を解決できるように微調整できます。
問題:
これが最終結果です。
RMRF 入力には、すべてのケースで 0 の重みが割り当てられています。この効率測定を私が適用している状況に関連させるには、各計算で 5 つの入力すべてを考慮する必要があります。
私が解決しようとしている問題は、重みをさらに制限することです。5 つの入力すべてを問題に組み込みたいので、「v」の重みを次のように制限したいと思います。
と同じです
このようにして、すべてのウェイトを他のウェイトの最大 5 倍に制限し、最小で 5 分の 1 に制限する必要があります。
モデルの各変数をチェックし、いくつかの異なるデータセットも試しました。また、データ フレーム内の rmrf と smb の場所を入れ替えて、コードに問題があるのかデータに問題があるのかを確認しました。
さまざまなデータセットを試してみたところ、RMRF が含まれている例外 (上記のような) があるようです。私の問題に対する答えは非常に単純であると信じ始めています。プログラムは、私の RMRF 入力を計算に含めないことが最適であると判断しました。そして、これに対する解決策は、重みに対する追加の制限です。
これは、標準化されていない入力を使用したソリューションの例です(データ内の数値の分布がまったく異なります)
optimization - Graph longest path using linear programming
I have a weighted directed graph where there are no cycles, and I wish to define the constraints so that I can solve a maximization of the weights of a path with linear programming. However, I can't wrap my head around how to do that.
For this I wish to use the LPSolve tool. I thought about making an adjacency matrix, but I don't know how I could make that work with LPSolve.
How can I define the possible paths from each node using constraints and make it generic enough that it would be simple to adapt to other graphs?
floating-point - 線形計画精度
最小化する線形問題に取り組んでいます。これは明確に定義されており、ほとんどの場合 [0;1] の範囲の数値を使用します。Excel の線形ソルバーと Mathematica の LinearProgramming は解決策を見つけますが、私の制約の 1 つにひどく違反しています。
私のソリューションが有効であるためには、制約は正確に 0 に等しい必要がありますが、両方のソルバーはそこに数値 ~10E-17 を配置し、それを満足として扱います。私は正確に操作しようとしましたが、10E-17 を下回ると、問題は線形ではないと述べられていますが、これは誤りです。自動スケーリングも役に立ちません。
コンピューターで使用される浮動小数点数の限られた精度を扱っていることは知っています。私はここで運命づけられているのか、それともこの問題を克服するためのトリックがあるのか を確認したいと思います.
r - lpSolveAPI を使用して 0/1-Knapsack MILP の複数のソリューションを取得する
再現可能な例:
RのlpSolveAPIを使用した単純な0/1- Knapsack問題について説明しました。これは 2 つの解を返すはずです。
問題:
しかし、解決策が見つかっget.solutioncount(lp_model)
たことを示しています。1
と の 2 つの解決策があると思い1 0 1
ます0 1 1
。
でlpSolveのnum.bin.solns
引数を渡そうとしましたが、解の数が残っていました。solve(lp_model, num.bin.solns=2)
1
質問:
どうすれば2つの正しい解を得ることができますか? API は非常に優れているため、lpSolveAPIを使用することを好みます。可能であれば、 lpSolveを直接使用することは避けたいと思います。