求解线性规划最大化的C++算法
C++ Algorithm for solving maximisation in linear programming
我正在学习线性规划的最大化,并且遇到了使用两个变量(silver 和 gold 进行最大化的算法这个实例)但我不确定代码的某个部分在做什么:
using namespace std;
class PreciousStones {
int n;
vector<int> as;
vector<int> ag;
下面的函数是我不清楚的部分:
double maxg (double s) {
double g = 0;
for (int i=0; i<n; i++)
if (s == 0)
g += ag[i];
else if (as[i] <= s)
s -= as[i];
else {
g += (1-s/as[i])*ag[i];
s = 0;
}
return g;
}
剩下的代码在下面(上下文),如果有人知道关于这个算法的一些相关论文,或者可以提供这个函数的简要解释,我将不胜感激
public:
double value(vector <int> silver, vector <int> gold) {
n = silver.size();
as = silver;
ag = gold;
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
if (as[j]*ag[i] > as[i]*ag[j]) {
swap(as[i], as[j]);
swap(ag[i], ag[j]);
}
double lo = 0;
double hi = 51*100;
double D = 1e-10;
while (lo+D < hi && lo*(1+D) < hi) {
double mid = (lo+hi)/2;
if (mid <= maxg(mid))
lo = mid;
else
hi = mid;
}
return lo;
}
};
您需要 google 的魔法词是 "Simplex Algorithm" 用于线性规划约束最大化。
这个幻灯片看起来可能就是你想要的。
http://www.cs.nccu.edu/~melikyan/mat_fm/lec/lec5_4.pdf
我正在学习线性规划的最大化,并且遇到了使用两个变量(silver 和 gold 进行最大化的算法这个实例)但我不确定代码的某个部分在做什么:
using namespace std;
class PreciousStones {
int n;
vector<int> as;
vector<int> ag;
下面的函数是我不清楚的部分:
double maxg (double s) {
double g = 0;
for (int i=0; i<n; i++)
if (s == 0)
g += ag[i];
else if (as[i] <= s)
s -= as[i];
else {
g += (1-s/as[i])*ag[i];
s = 0;
}
return g;
}
剩下的代码在下面(上下文),如果有人知道关于这个算法的一些相关论文,或者可以提供这个函数的简要解释,我将不胜感激
public:
double value(vector <int> silver, vector <int> gold) {
n = silver.size();
as = silver;
ag = gold;
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
if (as[j]*ag[i] > as[i]*ag[j]) {
swap(as[i], as[j]);
swap(ag[i], ag[j]);
}
double lo = 0;
double hi = 51*100;
double D = 1e-10;
while (lo+D < hi && lo*(1+D) < hi) {
double mid = (lo+hi)/2;
if (mid <= maxg(mid))
lo = mid;
else
hi = mid;
}
return lo;
}
};
您需要 google 的魔法词是 "Simplex Algorithm" 用于线性规划约束最大化。 这个幻灯片看起来可能就是你想要的。 http://www.cs.nccu.edu/~melikyan/mat_fm/lec/lec5_4.pdf