/* Copyright 2009-2015 David Hadka * * This file is part of the MOEA Framework. * * The MOEA Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * The MOEA Framework is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the MOEA Framework. If not, see <http://www.gnu.org/licenses/>. */ package org.moeaframework.problem.CEC2009; /** * Implementations for the actual function evaluations used by the CEC 2009 * test problem suite. */ class CEC2009 { /** * Private constructor to prevent instantiation. */ private CEC2009() { super(); } /* * The following source code is modified from the CEC 2009 test problem * suite available at {@link http://dces.essex.ac.uk/staff/qzhang/}. * Permission to distribute these modified source codes under the GNU * Lesser General Public License was obtained via e-mail correspondence * with the original authors. */ private static final double PI = 3.1415926535897932384626433832795; /** * Returns {@code 1.0} if the specified value is strictly positive; * otherwise returns {@code -1.0}. * * @param x the value * @return {@code 1.0} if the specified value is strictly positive; * otherwise returns {@code -1.0} */ private static double MYSIGN(double x) { return (x > 0.0 ? 1.0 : -1.0); } /** * Evaluates the UF1 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF1(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double yj; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); yj = yj * yj; if (j % 2 == 0) { sum2 += yj; count2++; } else { sum1 += yj; count1++; } } f[0] = x[0] + 2.0 * sum1 / (double)count1; f[1] = 1.0 - Math.sqrt(x[0]) + 2.0 * sum2 / (double)count2; } /** * Evaluates the UF2 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF2(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double yj; for (int j = 2; j <= nx; j++) { if (j % 2 == 0) { yj = x[j - 1] - 0.3 * x[0] * (x[0] * Math.cos(24.0 * PI * x[0] + 4.0 * j * PI / nx) + 2.0) * Math.sin(6.0 * PI * x[0] + j * PI / nx); sum2 += yj * yj; count2++; } else { yj = x[j - 1] - 0.3 * x[0] * (x[0] * Math.cos(24.0 * PI * x[0] + 4.0 * j * PI / nx) + 2.0) * Math.cos(6.0 * PI * x[0] + j * PI / nx); sum1 += yj * yj; count1++; } } f[0] = x[0] + 2.0 * sum1 / (double)count1; f[1] = 1.0 - Math.sqrt(x[0]) + 2.0 * sum2 / (double)count2; } /** * Evaluates the UF3 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF3(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double prod1 = 1.0; double prod2 = 1.0; double yj; double pj; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.pow(x[0], 0.5 * (1.0 + 3.0 * (j - 2.0) / (nx - 2.0))); pj = Math.cos(20.0 * yj * PI / Math.sqrt(j + 0.0)); if (j % 2 == 0) { sum2 += yj * yj; prod2 *= pj; count2++; } else { sum1 += yj * yj; prod1 *= pj; count1++; } } f[0] = x[0] + 2.0 * (4.0 * sum1 - 2.0 * prod1 + 2.0) / (double)count1; f[1] = 1.0 - Math.sqrt(x[0]) + 2.0 * (4.0 * sum2 - 2.0 * prod2 + 2.0) / (double)count2; } /** * Evaluates the UF4 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF4(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double yj; double hj; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); hj = Math.abs(yj) / (1.0 + Math.exp(2.0 * Math.abs(yj))); if (j % 2 == 0) { sum2 += hj; count2++; } else { sum1 += hj; count1++; } } f[0] = x[0] + 2.0 * sum1 / (double)count1; f[1] = 1.0 - x[0] * x[0] + 2.0 * sum2 / (double)count2; } /** * Evaluates the UF5 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF5(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double yj; double hj; double N = 10.0; double E = 0.1; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); hj = 2.0 * yj * yj - Math.cos(4.0 * PI * yj) + 1.0; if (j % 2 == 0) { sum2 += hj; count2++; } else { sum1 += hj; count1++; } } hj = (0.5 / N + E) * Math.abs(Math.sin(2.0 * N * PI * x[0])); f[0] = x[0] + hj + 2.0 * sum1 / (double)count1; f[1] = 1.0 - x[0] + hj + 2.0 * sum2 / (double)count2; } /** * Evaluates the UF6 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF6(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double prod1 = 1.0; double prod2 = 1.0; double yj; double hj; double pj; double N = 2.0; double E = 0.1; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); pj = Math.cos(20.0 * yj * PI / Math.sqrt(j + 0.0)); if (j % 2 == 0) { sum2 += yj * yj; prod2 *= pj; count2++; } else { sum1 += yj * yj; prod1 *= pj; count1++; } } hj = 2.0 * (0.5 / N + E) * Math.sin(2.0 * N * PI * x[0]); if (hj < 0.0) { hj = 0.0; } f[0] = x[0] + hj + 2.0 * (4.0 * sum1 - 2.0 * prod1 + 2.0) / (double)count1; f[1] = 1.0 - x[0] + hj + 2.0 * (4.0 * sum2 - 2.0 * prod2 + 2.0) / (double)count2; } /** * Evaluates the UF7 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF7(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double yj; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); if (j % 2 == 0) { sum2 += yj * yj; count2++; } else { sum1 += yj * yj; count1++; } } yj = Math.pow(x[0], 0.2); f[0] = yj + 2.0 * sum1 / (double)count1; f[1] = 1.0 - yj + 2.0 * sum2 / (double)count2; } /** * Evaluates the UF8 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF8(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; int count3 = 0; double sum1 = 0.0; double sum2 = 0.0; double sum3 = 0.0; double yj; for (int j = 3; j <= nx; j++) { yj = x[j - 1] - 2.0 * x[1] * Math.sin(2.0 * PI * x[0] + j * PI / nx); if (j % 3 == 1) { sum1 += yj * yj; count1++; } else if (j % 3 == 2) { sum2 += yj * yj; count2++; } else { sum3 += yj * yj; count3++; } } f[0] = Math.cos(0.5 * PI * x[0]) * Math.cos(0.5 * PI * x[1]) + 2.0 * sum1 / (double)count1; f[1] = Math.cos(0.5 * PI * x[0]) * Math.sin(0.5 * PI * x[1]) + 2.0 * sum2 / (double)count2; f[2] = Math.sin(0.5 * PI * x[0]) + 2.0 * sum3 / (double)count3; } /** * Evaluates the UF9 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF9(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; int count3 = 0; double sum1 = 0.0; double sum2 = 0.0; double sum3 = 0.0; double yj; double E = 0.1; for (int j = 3; j <= nx; j++) { yj = x[j - 1] - 2.0 * x[1] * Math.sin(2.0 * PI * x[0] + j * PI / nx); if (j % 3 == 1) { sum1 += yj * yj; count1++; } else if (j % 3 == 2) { sum2 += yj * yj; count2++; } else { sum3 += yj * yj; count3++; } } yj = (1.0 + E) * (1.0 - 4.0 * (2.0 * x[0] - 1.0) * (2.0 * x[0] - 1.0)); if (yj < 0.0) { yj = 0.0; } f[0] = 0.5 * (yj + 2 * x[0]) * x[1] + 2.0 * sum1 / (double)count1; f[1] = 0.5 * (yj - 2 * x[0] + 2.0) * x[1] + 2.0 * sum2 / (double)count2; f[2] = 1.0 - x[1] + 2.0 * sum3 / (double)count3; } /** * Evaluates the UF10 problem. * * @param x the decision variables * @param f the objective function output * @param nx the number of decision variables */ public static void UF10(double[] x, double[] f, int nx) { int count1 = 0; int count2 = 0; int count3 = 0; double sum1 = 0.0; double sum2 = 0.0; double sum3 = 0.0; double yj; double hj; for (int j = 3; j <= nx; j++) { yj = x[j - 1] - 2.0 * x[1] * Math.sin(2.0 * PI * x[0] + j * PI / nx); hj = 4.0 * yj * yj - Math.cos(8.0 * PI * yj) + 1.0; if (j % 3 == 1) { sum1 += hj; count1++; } else if (j % 3 == 2) { sum2 += hj; count2++; } else { sum3 += hj; count3++; } } f[0] = Math.cos(0.5 * PI * x[0]) * Math.cos(0.5 * PI * x[1]) + 2.0 * sum1 / (double)count1; f[1] = Math.cos(0.5 * PI * x[0]) * Math.sin(0.5 * PI * x[1]) + 2.0 * sum2 / (double)count2; f[2] = Math.sin(0.5 * PI * x[0]) + 2.0 * sum3 / (double)count3; } /** * Evaluates the CF1 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF1(double[] x, double[] f, double[] c, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double yj; double N = 10.0; double a = 1.0; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.pow(x[0], 0.5 * (1.0 + 3.0 * (j - 2.0) / (nx - 2.0))); if (j % 2 == 1) { sum1 += yj * yj; count1++; } else { sum2 += yj * yj; count2++; } } f[0] = x[0] + 2.0 * sum1 / (double)count1; f[1] = 1.0 - x[0] + 2.0 * sum2 / (double)count2; c[0] = f[1] + f[0] - a * Math.abs(Math.sin(N * PI * (f[0] - f[1] + 1.0))) - 1.0; } /** * Evaluates the CF2 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF2(double[] x, double[] f, double[] c, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double yj; double N = 2.0; double a = 1.0; double t; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); if (j % 2 == 1) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); sum1 += yj * yj; count1++; } else { yj = x[j - 1] - Math.cos(6.0 * PI * x[0] + j * PI / nx); sum2 += yj * yj; count2++; } } f[0] = x[0] + 2.0 * sum1 / (double)count1; f[1] = 1.0 - Math.sqrt(x[0]) + 2.0 * sum2 / (double)count2; t = f[1] + Math.sqrt(f[0]) - a * Math.sin(N * PI * (Math.sqrt(f[0]) - f[1] + 1.0)) - 1.0; c[0] = MYSIGN(t) * Math.abs(t) / (1 + Math.exp(4.0 * Math.abs(t))); } /** * Evaluates the CF3 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF3(double[] x, double[] f, double[] c, int nx) { int count1 = 0; int count2 = 0; double sum1 = 0.0; double sum2 = 0.0; double prod1 = 1.0; double prod2 = 1.0; double yj; double pj; double N = 2.0; double a = 1.0; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); pj = Math.cos(20.0 * yj * PI / Math.sqrt(j + 0.0)); if (j % 2 == 0) { sum2 += yj * yj; prod2 *= pj; count2++; } else { sum1 += yj * yj; prod1 *= pj; count1++; } } f[0] = x[0] + 2.0 * (4.0 * sum1 - 2.0 * prod1 + 2.0) / (double)count1; f[1] = 1.0 - x[0] * x[0] + 2.0 * (4.0 * sum2 - 2.0 * prod2 + 2.0) / (double)count2; c[0] = f[1] + f[0] * f[0] - a * Math.sin(N * PI * (f[0] * f[0] - f[1] + 1.0)) - 1.0; } /** * Evaluates the CF4 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF4(double[] x, double[] f, double[] c, int nx) { double sum1 = 0.0; double sum2 = 0.0; double yj; double t; for (int j = 2; j <= nx; j++) { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); if (j % 2 == 1) { sum1 += yj * yj; } else { if (j == 2) { sum2 += yj < 1.5 - 0.75 * Math.sqrt(2.0) ? Math.abs(yj) : (0.125 + (yj - 1) * (yj - 1)); } else { sum2 += yj * yj; } } } f[0] = x[0] + sum1; f[1] = 1.0 - x[0] + sum2; t = x[1] - Math.sin(6.0 * x[0] * PI + 2.0 * PI / nx) - 0.5 * x[0] + 0.25; c[0] = MYSIGN(t) * Math.abs(t) / (1 + Math.exp(4.0 * Math.abs(t))); } /** * Evaluates the CF5 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF5(double[] x, double[] f, double[] c, int nx) { double sum1 = 0.0; double sum2 = 0.0; double yj; for (int j = 2; j <= nx; j++) { if (j % 2 == 1) { yj = x[j - 1] - 0.8 * x[0] * Math.cos(6.0 * PI * x[0] + j * PI / nx); sum1 += 2.0 * yj * yj - Math.cos(4.0 * PI * yj) + 1.0; } else { yj = x[j - 1] - 0.8 * x[0] * Math.sin(6.0 * PI * x[0] + j * PI / nx); if (j == 2) { sum2 += yj < 1.5 - 0.75 * Math.sqrt(2.0) ? Math.abs(yj) : (0.125 + (yj - 1) * (yj - 1)); } else { sum2 += 2.0 * yj * yj - Math.cos(4.0 * PI * yj) + 1.0; } } } f[0] = x[0] + sum1; f[1] = 1.0 - x[0] + sum2; c[0] = x[1] - 0.8 * x[0] * Math.sin(6.0 * x[0] * PI + 2.0 * PI / nx) - 0.5 * x[0] + 0.25; } /** * Evaluates the CF6 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF6(double[] x, double[] f, double[] c, int nx) { double sum1 = 0.0; double sum2 = 0.0; double yj; for (int j = 2; j <= nx; j++) { if (j % 2 == 1) { yj = x[j - 1] - 0.8 * x[0] * Math.cos(6.0 * PI * x[0] + j * PI / nx); sum1 += yj * yj; } else { yj = x[j - 1] - 0.8 * x[0] * Math.sin(6.0 * PI * x[0] + j * PI / nx); sum2 += yj * yj; } } f[0] = x[0] + sum1; f[1] = (1.0 - x[0]) * (1.0 - x[0]) + sum2; c[0] = x[1] - 0.8 * x[0] * Math.sin(6.0 * x[0] * PI + 2.0 * PI / nx) - MYSIGN((x[0] - 0.5) * (1.0 - x[0])) * Math.sqrt(Math.abs((x[0] - 0.5) * (1.0 - x[0]))); c[1] = x[3] - 0.8 * x[0] * Math.sin(6.0 * x[0] * PI + 4.0 * PI / nx) - MYSIGN(0.25 * Math.sqrt(1 - x[0]) - 0.5 * (1.0 - x[0])) * Math.sqrt(Math.abs(0.25 * Math.sqrt(1 - x[0]) - 0.5 * (1.0 - x[0]))); } /** * Evaluates the CF7 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF7(double[] x, double[] f, double[] c, int nx) { double sum1 = 0.0; double sum2 = 0.0; double yj; for (int j = 2; j <= nx; j++) { if (j % 2 == 1) { yj = x[j - 1] - Math.cos(6.0 * PI * x[0] + j * PI / nx); sum1 += 2.0 * yj * yj - Math.cos(4.0 * PI * yj) + 1.0; } else { yj = x[j - 1] - Math.sin(6.0 * PI * x[0] + j * PI / nx); if (j == 2 || j == 4) { sum2 += yj * yj; } else { sum2 += 2.0 * yj * yj - Math.cos(4.0 * PI * yj) + 1.0; } } } f[0] = x[0] + sum1; f[1] = (1.0 - x[0]) * (1.0 - x[0]) + sum2; c[0] = x[1] - Math.sin(6.0 * x[0] * PI + 2.0 * PI / nx) - MYSIGN((x[0] - 0.5) * (1.0 - x[0])) * Math.sqrt(Math.abs((x[0] - 0.5) * (1.0 - x[0]))); c[1] = x[3] - Math.sin(6.0 * x[0] * PI + 4.0 * PI / nx) - MYSIGN(0.25 * Math.sqrt(1 - x[0]) - 0.5 * (1.0 - x[0])) * Math.sqrt(Math.abs(0.25 * Math.sqrt(1 - x[0]) - 0.5 * (1.0 - x[0]))); } /** * Evaluates the CF8 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF8(double[] x, double[] f, double[] c, int nx) { int count1 = 0; int count2 = 0; int count3 = 0; double sum1 = 0.0; double sum2 = 0.0; double sum3 = 0.0; double yj; double N = 2.0; double a = 4.0; for (int j = 3; j <= nx; j++) { yj = x[j - 1] - 2.0 * x[1] * Math.sin(2.0 * PI * x[0] + j * PI / nx); if (j % 3 == 1) { sum1 += yj * yj; count1++; } else if (j % 3 == 2) { sum2 += yj * yj; count2++; } else { sum3 += yj * yj; count3++; } } f[0] = Math.cos(0.5 * PI * x[0]) * Math.cos(0.5 * PI * x[1]) + 2.0 * sum1 / (double)count1; f[1] = Math.cos(0.5 * PI * x[0]) * Math.sin(0.5 * PI * x[1]) + 2.0 * sum2 / (double)count2; f[2] = Math.sin(0.5 * PI * x[0]) + 2.0 * sum3 / (double)count3; c[0] = (f[0] * f[0] + f[1] * f[1]) / (1 - f[2] * f[2]) - a * Math.abs(Math.sin(N * PI * ((f[0] * f[0] - f[1] * f[1]) / (1 - f[2] * f[2]) + 1.0))) - 1.0; } /** * Evaluates the CF9 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF9(double[] x, double[] f, double[] c, int nx) { int count1 = 0; int count2 = 0; int count3 = 0; double sum1 = 0.0; double sum2 = 0.0; double sum3 = 0.0; double yj; double N = 2.0; double a = 3.0; for (int j = 3; j <= nx; j++) { yj = x[j - 1] - 2.0 * x[1] * Math.sin(2.0 * PI * x[0] + j * PI / nx); if (j % 3 == 1) { sum1 += yj * yj; count1++; } else if (j % 3 == 2) { sum2 += yj * yj; count2++; } else { sum3 += yj * yj; count3++; } } f[0] = Math.cos(0.5 * PI * x[0]) * Math.cos(0.5 * PI * x[1]) + 2.0 * sum1 / (double)count1; f[1] = Math.cos(0.5 * PI * x[0]) * Math.sin(0.5 * PI * x[1]) + 2.0 * sum2 / (double)count2; f[2] = Math.sin(0.5 * PI * x[0]) + 2.0 * sum3 / (double)count3; c[0] = (f[0] * f[0] + f[1] * f[1]) / (1 - f[2] * f[2]) - a * Math.sin(N * PI * ((f[0] * f[0] - f[1] * f[1]) / (1 - f[2] * f[2]) + 1.0)) - 1.0; } /** * Evaluates the CF10 problem. * * @param x the decision variables * @param f the objective function output * @param c the constraint violation output * @param nx the number of decision variables */ public static void CF10(double[] x, double[] f, double[] c, int nx) { int count1 = 0; int count2 = 0; int count3 = 0; double sum1 = 0.0; double sum2 = 0.0; double sum3 = 0.0; double yj; double hj; double N = 2.0; double a = 1.0; for (int j = 3; j <= nx; j++) { yj = x[j - 1] - 2.0 * x[1] * Math.sin(2.0 * PI * x[0] + j * PI / nx); hj = 4.0 * yj * yj - Math.cos(8.0 * PI * yj) + 1.0; if (j % 3 == 1) { sum1 += hj; count1++; } else if (j % 3 == 2) { sum2 += hj; count2++; } else { sum3 += hj; count3++; } } f[0] = Math.cos(0.5 * PI * x[0]) * Math.cos(0.5 * PI * x[1]) + 2.0 * sum1 / (double)count1; f[1] = Math.cos(0.5 * PI * x[0]) * Math.sin(0.5 * PI * x[1]) + 2.0 * sum2 / (double)count2; f[2] = Math.sin(0.5 * PI * x[0]) + 2.0 * sum3 / (double)count3; c[0] = (f[0] * f[0] + f[1] * f[1]) / (1 - f[2] * f[2]) - a * Math.sin(N * PI * ((f[0] * f[0] - f[1] * f[1]) / (1 - f[2] * f[2]) + 1.0)) - 1.0; } /** * Transforms the decision variables according to the given rotation matrix * and scaling values. This is used in the UF11 and UF12 problems. * * @param x the original decision variables * @param zz the transformed decision variables output * @param psum the penalty value output * @param M the rotation matrix * @param lamda_l the scaling values * @param nx the number of decision variables * @param n_obj the number of objectives */ public static void transform(double[] x, double[] zz, double[] psum, double[][] M, double[] lamda_l, int nx, int n_obj) { int k = nx - n_obj + 1; double[] p = new double[nx]; for (int i = 0; i < nx; i++) { double z = 0.0; for (int j = 0; j < nx; j++) { z += M[i][j] * x[j]; } if (z >= 0 && z <= 1) { zz[i] = z; p[i] = 0; } else if (z < 0) { zz[i] = -lamda_l[i] * z; p[i] = -z; } else { zz[i] = 1 - lamda_l[i] * (z - 1); p[i] = z - 1; } } for (int j = 0; j < n_obj; j++) { psum[j] = 0; } for (int i = nx - k + 1; i <= nx; i++) { for (int j = 0; j < n_obj; j++) { psum[j] = Math.sqrt(Math.pow(psum[j], 2) + Math.pow(p[i - 1], 2)); } } for (int i = 1; i <= n_obj; i++) { for (int j = n_obj - i; j >= 1; j--) { psum[i - 1] = Math.sqrt(Math.pow(psum[i - 1], 2) + Math.pow(p[j - 1], 2)); } if (i > 1) { psum[i - 1] = Math.sqrt(Math.pow(psum[i - 1], 2) + Math.pow(p[(n_obj - i + 1) - 1], 2)); } } } }