我试图在优化问题中找到两个数组的非支配值。
我有两个数组,lost_bars_array
并且prices_array
. 我想做的是尽量减少丢失的酒吧,并最大限度地提高价格。我想得到一个以no_dominated
两个数组的非支配值的索引命名的最终数组。这很容易理解。让我用一个例子来解释这一点。
我们有初始的两个数组:
理论过程是这样的:
1.获取第一个值
2.获取第二个(索引#1),看看它是否比第一个更好。这意味着我们必须看看第二个是否有更少的损失和更大的价格。事实并非如此,它有 LESS 酒吧,但价格也更低,所以我们不能说这是一个更好的解决方案。我们将其保存为可行的解决方案
3.现在是下一个,索引#2,这个改进了索引#1的解决方案,因为它丢失了更少的brs和更大的价格。但它并没有提高索引#0,因为它丢失的柱线更少,而且价格也更低。所以我们保存索引#0 和索引#2 作为可能的解决方案。
4.索引#3 和#4 有更多的损失柱和更少的价格,所以只是拒绝它们作为可能的解决方案。
5.最后,指数#5,比指数#0 有更少的损失柱线和更多的价格,因此,指数#0 的解决方案被拒绝,最终的非支配值将是指数#2 和指数#5 的值。
这是我到目前为止所尝试的。
#include <stdio.h>
int main(int argc, char** argv)
{
int lost_bars_array[] = {15, 10, 8, 15, 17, 9};
int prices_array[] = {35, 25, 30, 10, 15, 36};
int no_dominated[6];
int cont = 6;
for (int actual_pos = 0; actual_pos < cont; actual_pos++)
{
if (actual_pos == 0)
{
no_dominated[actual_pos] = actual_pos;
}
else
{
// Here's where I've the problems, I dont know how to handle the arrays
for (int p = 0; p < actual_pos; p++)
{
if (lost_bars_array[p] > lost_bars_array[p + 1] &&
prices_array[p] < prices_array[p + 1])
{
no_dominated[p] = p;
}
}
}
}
printf("\nThe non-dominated solutions index are: %d");
for (int i = 0; i < 6; i++)
{
printf(" %d ", no_dominated[i]);
}
printf("\n");
return 0;
}
代码应将索引2 5
作为解决方案输出。我希望我正确地解释了这个问题。
任何帮助表示赞赏。提前致谢。