double objectiveFunction(double[] x)
{
// Compute
//
// Phi(x) = f(x) + rho/2 sum(c_i(x)²) - sum(lambda_i * c_i(x))
//
double sumOfSquares = 0;
double weightedSum = 0;
double rho2 = rho / 2;
// For each equality constraint
for (int i = 0; i < equalityConstraints.Length; i++)
{
double c = equalityConstraints[i].Function(x) - equalityConstraints[i].Value;
sumOfSquares += rho2 * c * c;
weightedSum += lambda[i] * c;
}
// For each "lesser than" inequality constraint
for (int i = 0; i < lesserThanConstraints.Length; i++)
{
double c = lesserThanConstraints[i].Function(x) - lesserThanConstraints[i].Value;
if (c > 0)
{
sumOfSquares += rho2 * c * c;
weightedSum += mu[i] * c;
}
}
// For each "greater than" inequality constraint
for (int i = 0; i < greaterThanConstraints.Length; i++)
{
double c = -greaterThanConstraints[i].Function(x) + greaterThanConstraints[i].Value;
if (c > 0)
{
sumOfSquares += rho2 * c * c;
weightedSum += nu[i] * c;
}
}
double phi = Function(x);
return phi + sumOfSquares - weightedSum;
}