Setting up linear optimization problem
古いコメントを表示
Hi,
I have two 100x1 arrays, X and Y. How do I set this linear problem to run using the optimization toolbox solver?
I want to find the minimum postive value of X, call it M, subject to these constraints:
(1) when the value of X is greater than M, a new variable, Z equals 1
(2) when the value of X is less than -M, the new variable Z equals -1
(3) if -M<X<M, then the new variuable Z equals 0.
I want to find the that maximizes the sum of Y*Z.
Any help would be appreciated!
IP
5 件のコメント
Walter Roberson
2022 年 5 月 27 日
When what value is greater than M?
Inna Pelloso
2022 年 5 月 27 日
Inna Pelloso
2022 年 5 月 27 日
Walter Roberson
2022 年 5 月 27 日
So only entries already in X are to be considered for M? Making it a discrete problem that you could answer by testing all positive values in X?
Inna Pelloso
2022 年 5 月 27 日
採用された回答
その他の回答 (1 件)
Since your vectors X and Y are of moderate size, don't use an optimization tool.
I think it's best to proceed as follows:
- Extract all positive entries of the X-vector.
2. For each of these x-values, calculate the Z vector and evaluate sum(Z*Y).
3. From the sums obtained, choose the maximum sum. If the maximum sum is only attained once, the
corresponding x-value is the solution. If there are several x-values with the maximum sum, choose the
smallest.
6 件のコメント
Inna Pelloso
2022 年 5 月 27 日
編集済み: Inna Pelloso
2022 年 5 月 27 日
What you mention is akin to a brute force method, and not practical as I'm dealign with very large datasets.
I don't think an optimizer will be faster for a problem of this type, also with larger datasets, because what else can be done apart from testing all possible choices for M in X.
The problem as stated, is a generalization.
?
Inna Pelloso
2022 年 5 月 28 日
編集済み: Inna Pelloso
2022 年 5 月 28 日
Walter Roberson
2022 年 5 月 28 日
I have a vectorized method mentally outlined that (if I have not overlooked something) would take time and memory proportional to numel(X) * numel(unique(abs(X)). It is not clear to me that any algorithm could improve the big-O() time but non-vectorized could probably improve the memory usage.
If there is a more time-efficient method it would probably require dynamic programming. There just might possibly be an approach that is numel(X) * log(numel(unique(abs(X)))
Inna Pelloso
2022 年 5 月 28 日
カテゴリ
ヘルプ センター および File Exchange で Solver Outputs and Iterative Display についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!