Source code for desdeo_problem.testproblems.GAA

"""
The General Aviation Aircraft (GAA) problem.

T. W. Simpson, W. Chen, J. K. Allen, and F. Mistree (1996), 
"Conceptual design of a family of products through the use of the robust
concept exploration method," in 6th AIAA/USAF/NASA/ ISSMO Symposium on 
Multidiciplinary Analysis and Optimization, vol. 2, pp. 1535-1545.

T. W. Simpson, B. S. D'Souza (2004), "Assessing variable levels of platform 
commonality within a product family using a multiobjective genetic algorithm," 
Concurrent Engineering: Research and Applications, vol. 12, no. 2, pp. 119-130.

R. Shah, P. M. Reed, and T. W. Simpson (2011), "Many-objective evolutionary optimization 
and visual analytics for product family design," Multiobjective Evolutionary Optimisation 
for Product Design and Manufacturing, Springer, London, pp. 137-159.

M. Woodruff, T. W. Simpson, P. M. Reed (2013), "Diagnostic Analysis of Metamodels' 
Multivariate Dependencies and their Impacts in Many-Objective Design Optimization," 
Proceedings of the ASME 2013 IDETC/CIE Conference, Paper No. DETC2013-13125.

https://github.com/matthewjwoodruff/generalaviation

"""

from desdeo_problem.problem.Variable import Variable
from desdeo_problem.problem.Objective import ScalarObjective
from desdeo_problem.problem.Problem import MOProblem, ProblemBase
from desdeo_problem import ScalarConstraint, problem

import numpy as np

[docs]def gaa(var_iv: np.array = np.array([ 0.36, 9, 3, 5.7, 22, 97, 17, 3.4, 0.75, 0.36, 9, 3, 5.7, 22, 97, 17, 3.4, 0.75, 0.36, 9, 3, 5.7, 22, 97, 17, 3.4, 0.75 ])) -> MOProblem: """The General Aviation Aircraft (GAA) problem. 27 design variables, 10 objectives and 1 constraint. Arguments: var_iv (np.array): Optional, initial variable values. Returns: MOProblem: a problem object. """ # Check the number of variables if (np.shape(np.atleast_2d(var_iv)[0]) != (27,)): raise RuntimeError("Number of variables must be 27") # Lower bounds lb = np.array([ 0.24, 7, 0, 5.5, 19, 85, 14, 3, 0.46, 0.24, 7, 0, 5.5, 19, 85, 14, 3, 0.46, 0.24, 7, 0, 5.5, 19, 85, 14, 3, 0.46 ]) # Upper bounds ub = np.array([ 0.48, 11, 6, 5.968, 25, 110, 20, 3.75, 1, 0.48, 11, 6, 5.968, 25, 110, 20, 3.75, 1, 0.48, 11, 6, 5.968, 25, 110, 20, 3.75, 1 ]) # Check the variable bounds if np.any(lb > var_iv) or np.any(ub < var_iv): raise ValueError("Initial variable values need to be between lower and upper bounds") def scaled_variables(x: np.ndarray) -> np.ndarray: scaled_x = np.zeros(x.shape) scaled_x[:,0] = (x[:,0] - 0.36) / 0.12 scaled_x[:,1] = (x[:,1] - 9) / 2 scaled_x[:,2] = (x[:,2] - 3) / 3 scaled_x[:,3] = (x[:,3] - 5.734) / 0.234 scaled_x[:,4] = (x[:,4] - 22) / 3 scaled_x[:,5] = (x[:,5] - 97.5) / 12.5 scaled_x[:,6] = (x[:,6] - 17) / 3 scaled_x[:,7] = (x[:,7] - 3.375) / 0.375 scaled_x[:,8] = (x[:,8] - 0.73) / 0.27 scaled_x[:,9] = (x[:,9] - 0.36) / 0.12 scaled_x[:,10] = (x[:,10] - 9) / 2 scaled_x[:,11] = (x[:,11] - 3) / 3 scaled_x[:,12] = (x[:,12] - 5.734) / 0.234 scaled_x[:,13] = (x[:,13] - 22) / 3 scaled_x[:,14] = (x[:,14] - 97.5) / 12.5 scaled_x[:,15] = (x[:,15] - 17) / 3 scaled_x[:,16] = (x[:,16] - 3.375) / 0.375 scaled_x[:,17] = (x[:,17] - 0.73) / 0.27 scaled_x[:,18] = (x[:,18] - 0.36) / 0.12 scaled_x[:,19] = (x[:,19] - 9) / 2 scaled_x[:,20] = (x[:,20] - 3) / 3 scaled_x[:,21] = (x[:,21] - 5.734) / 0.234 scaled_x[:,22] = (x[:,22] - 22) / 3 scaled_x[:,23] = (x[:,23] - 97.5) / 12.5 scaled_x[:,24] = (x[:,24] - 17) / 3 scaled_x[:,25] = (x[:,25] - 3.375) / 0.375 return scaled_x # Response variables def noise_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 74.099998 - 0.0004 * x[:,0] - 0.0156 * x[:,1] + 0.0003 * x[:,2] + 0.9684 * x[:,3] + 0.0316 * x[:,4] - 0.0053 * x[:,5] - 0.0015 * x[:,6] - 0.0002 * x[:,7] + 0.0007 * x[:,8] - 0.0001 * x[:,0] * x[:,3] - 0.0001 * x[:,0] * x[:,4] - 0.0001 * x[:,0] * x[:,5] + 0 * x[:,0] * x[:,5] + 0.0001 * x[:,0] * x[:,7] + 0 * x[:,1] * x[:,2] - 0.0012 * x[:,1] * x[:,3] - 0.0014 * x[:,1] * x[:,4] - 0.0002 * x[:,1] * x[:,5] + 0 * x[:,1] * x[:,6] + 0.0003 * x[:,1] * x[:,7] + 0.0001 * x[:,1] * x[:,8] + 0 * x[:,2] * x[:,8] - 0.0003 * x[:,3] * x[:,4] + 0.0058 * x[:,3] * x[:,5] - 0.0001 * x[:,3] * x[:,6] + 0.0002 * x[:,3] * x[:,7] - 0.0001 * x[:,3] * x[:,8] + 0.0002 * x[:,4] * x[:,5] - 0.0003 * x[:,4] * x[:,6] - 0.0002 * x[:,4] * x[:,7] + 0.0001 * x[:,4] * x[:,8] - 0.0001 * x[:,5] * x[:,6] + 0 * x[:,5] * x[:,8] - 0.0001 * x[:,6] * x[:,7] - 0.0001 * x[:,6] * x[:,8] + 0 * x[:,7] * x[:,8] + 0.0008 * pow(x[:,0], 2) + 0.0016 * pow(x[:,1], 2) + 0.0011 * pow(x[:,2], 2) + 0.1105 * pow(x[:,3], 2) + 0.0004 * pow(x[:,4], 2) - 0.0019 * pow(x[:,5], 2) + 0.0009 * pow(x[:,6], 2) + 0.001 * pow(x[:,7], 2) + 0.0007 * pow(x[:,8], 2) ) def wemp_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 1917 + 5.979 * x[:,0] + 35.130001 * x[:,1] - 0.7119 * x[:,2] + 11.11 * x[:,3] - 32.290001 * x[:,4] + 5.739 * x[:,5] + 48.110001 * x[:,6] + 0.3376 * x[:,7] + 15.28 * x[:,8] + 1.244 * x[:,0] * x[:,1] - 0.1315 * x[:,0] * x[:,2] + 1.129 * x[:,0] * x[:,3] - 2.393 * x[:,0] * x[:,4] + 0.3954 * x[:,0] * x[:,5] - 0.4978 * x[:,0] * x[:,6] - 0.3882 * x[:,0] * x[:,7] + 0.5742 * x[:,0] * x[:,8] - 0.2236 * x[:,1] * x[:,2] - 0.0739 * x[:,1] * x[:,3] - 3.805 * x[:,1] * x[:,4] - 0.0164 * x[:,1] * x[:,5] - 0.0923 * x[:,1] * x[:,6] - 0.9326 * x[:,1] * x[:,7] + 3.135 * x[:,1] * x[:,8] - 0.0385 * x[:,2] * x[:,3] + 0.4376 * x[:,2] * x[:,4] + 0.0259 * x[:,2] * x[:,5] + 0.4009 * x[:,2] * x[:,6] + 0.3002 * x[:,2] * x[:,7] + 0.7036 * x[:,2] * x[:,8] - 0.2083 * x[:,3] * x[:,4] + 1.165 * x[:,3] * x[:,5] - 0.2119 * x[:,3] * x[:,6] - 0.1934 * x[:,3] * x[:,7] + 0.1462 * x[:,3] * x[:,8] - 0.0644 * x[:,4] * x[:,5] + 3.194 * x[:,4] * x[:,6] + 2.672 * x[:,4] * x[:,7] - 0.4407 * x[:,4] * x[:,8] - 0.057 * x[:,5] * x[:,6] - 0.0529 * x[:,5] * x[:,7] + 0.0341 * x[:,5] * x[:,8] + 4.88 * x[:,6] * x[:,7] + 1.349 * x[:,6] * x[:,8] + 0.8836 * x[:,7] * x[:,8] + 0.958 * pow(x[:,0], 2) - 1.812 * pow(x[:,1], 2) + 1.173 * pow(x[:,2], 2) + 0.753 * pow(x[:,3], 2) + 3.638 * pow(x[:,4], 2) + 0.133 * pow(x[:,5], 2) + 5.323 * pow(x[:,6], 2) + 1.478 * pow(x[:,7], 2) - 0.192 * pow(x[:,8], 2) ) def doc_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 83.17 + 12.53 * x[:,0] - 0.0477 * x[:,1] - 0.0215 * x[:,2] + 3.597 * x[:,3] - 0.7367 * x[:,4] + 0.7481 * x[:,5] + 0.733 * x[:,6] - 0.2029 * x[:,7] + 0.0393 * x[:,8] + 0.6526 * x[:,0] * x[:,1] + 0.0481 * x[:,0] * x[:,2] + 1.208 * x[:,0] * x[:,3] + 0.6802 * x[:,0] * x[:,4] + 0.0992 * x[:,0] * x[:,5] - 0.7074 * x[:,0] * x[:,6] + 0.2768 * x[:,0] * x[:,7] + 0.0109 * x[:,0] * x[:,8] + 0.0031 * x[:,1] * x[:,2] + 0.2146 * x[:,1] * x[:,3] - 0.0721 * x[:,1] * x[:,4] - 0.2445 * x[:,1] * x[:,5] - 0.0172 * x[:,1] * x[:,6] + 0.0127 * x[:,1] * x[:,7] + 0.0087 * x[:,1] * x[:,8] + 0.0169 * x[:,2] * x[:,3] + 0.0151 * x[:,2] * x[:,4] - 0.0063 * x[:,2] * x[:,5] - 0.0001 * x[:,2] * x[:,6] - 0.0042 * x[:,2] * x[:,7] - 0.0059 * x[:,2] * x[:,8] + 0.0789 * x[:,3] * x[:,4] + 0.676 * x[:,3] * x[:,5] - 0.1912 * x[:,3] * x[:,6] + 0.0519 * x[:,3] * x[:,7] - 0.0265 * x[:,3] * x[:,8] + 0.0136 * x[:,4] * x[:,5] + 0.0804 * x[:,4] * x[:,6] + 0.0577 * x[:,4] * x[:,7] + 0.017 * x[:,4] * x[:,8] - 0.0617 * x[:,5] * x[:,6] + 0.0058 * x[:,5] * x[:,7] - 0.0178 * x[:,5] * x[:,8] + 0.0901 * x[:,6] * x[:,7] + 0.0047 * x[:,6] * x[:,8] - 0.003 * x[:,7] * x[:,8] - 11.37 * pow(x[:,0], 2) - 0.2836 * pow(x[:,1], 2) - 0.3149 * pow(x[:,2], 2) + 5.337 * pow(x[:,3], 2) - 0.3711 * pow(x[:,4], 2) - 0.071 * pow(x[:,5], 2) - 0.2177 * pow(x[:,6], 2) - 0.2354 * pow(x[:,7], 2) - 0.238 * pow(x[:,8], 2) ) def rough_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 2.197 - 0.0002 * x[:,0] + 0.1541 * x[:,1] - 0.0012 * x[:,2] + 0.0222 * x[:,3] - 0.1611 * x[:,4] - 0.0012 * x[:,5] - 0.0628 * x[:,6] - 0.011 * x[:,7] + 0.0068 * x[:,8] + 0.0006 * x[:,0] * x[:,1] + 0.0001 * x[:,0] * x[:,2] + 0.001 * x[:,0] * x[:,4] + 0.0001 * x[:,0] * x[:,6] - 0.0002 * x[:,0] * x[:,7] - 0.0006 * x[:,0] * x[:,8] - 0.0001 * x[:,1] * x[:,2] + 0.0006 * x[:,1] * x[:,3] - 0.0113 * x[:,1] * x[:,4] - 0.0001 * x[:,1] * x[:,5] - 0.0045 * x[:,1] * x[:,6] - 0.0017 * x[:,1] * x[:,7] - 0.0011 * x[:,1] * x[:,8] - 0.0002 * x[:,2] * x[:,3] - 0.0004 * x[:,2] * x[:,4] - 0.0006 * x[:,2] * x[:,6] - 0.0003 * x[:,2] * x[:,7] - 0.0001 * x[:,2] * x[:,8] - 0.0051 * x[:,3] * x[:,4] - 0.0038 * x[:,3] * x[:,5] + 0.0022 * x[:,3] * x[:,6] - 0.0012 * x[:,3] * x[:,7] - 0.0002 * x[:,3] * x[:,8] - 0.001 * x[:,4] * x[:,5] - 0.0036 * x[:,4] * x[:,6] - 0.0025 * x[:,4] * x[:,7] - 0.0025 * x[:,4] * x[:,8] + 0.0008 * x[:,5] * x[:,6] - 0.0003 * x[:,5] * x[:,7] - 0.0001 * x[:,5] * x[:,8] - 0.001 * x[:,6] * x[:,7] - 0.0007 * x[:,6] * x[:,8] + 0.0012 * pow(x[:,0], 2) - 0.0273 * pow(x[:,1], 2) - 0.0048 * pow(x[:,2], 2) + 0.0033 * pow(x[:,3], 2) + 0.0062 * pow(x[:,4], 2) + 0.0021 * pow(x[:,5], 2) - 0.0016 * pow(x[:,6], 2) - 0.0011 * pow(x[:,7], 2) - 0.0048 * pow(x[:,8], 2) ) def wfuel_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 416.399994 - 6.093 * x[:,0] - 31.91 * x[:,1] + 0.7968 * x[:,2] - 19.17 * x[:,3] + 34.189999 * x[:,4] - 7.57 * x[:,5] - 49.610001 * x[:,6] + 0.2331 * x[:,7] - 15.33 * x[:,8] - 1.201 * x[:,0] * x[:,1] + 0.1735 * x[:,0] * x[:,2] - 1.247 * x[:,0] * x[:,3] + 1.703 * x[:,0] * x[:,4] - 0.4588 * x[:,0] * x[:,5] + 0.1585 * x[:,0] * x[:,6] + 0.6156 * x[:,0] * x[:,7] - 0.528 * x[:,0] * x[:,8] + 0.2215 * x[:,1] * x[:,2] - 0.4976 * x[:,1] * x[:,3] + 4.058 * x[:,1] * x[:,4] - 0.108 * x[:,1] * x[:,5] + 0.2679 * x[:,1] * x[:,6] + 0.8514 * x[:,1] * x[:,7] - 3.182 * x[:,1] * x[:,8] + 0.0359 * x[:,2] * x[:,3] - 0.482 * x[:,2] * x[:,4] - 0.0207 * x[:,2] * x[:,5] - 0.3878 * x[:,2] * x[:,6] - 0.3249 * x[:,2] * x[:,7] - 0.715 * x[:,2] * x[:,8] + 0.3374 * x[:,3] * x[:,4] - 2.403 * x[:,3] * x[:,5] + 0.4519 * x[:,3] * x[:,6] + 0.1352 * x[:,3] * x[:,7] - 0.123 * x[:,3] * x[:,8] + 0.2498 * x[:,4] * x[:,5] - 2.896 * x[:,4] * x[:,6] - 3.016 * x[:,4] * x[:,7] + 0.3662 * x[:,4] * x[:,8] - 0.114 * x[:,5] * x[:,6] + 0.0571 * x[:,5] * x[:,7] - 0.0222 * x[:,5] * x[:,8] - 4.689 * x[:,6] * x[:,7] - 1.339 * x[:,6] * x[:,8] - 0.9311 * x[:,7] * x[:,8] - 0.7538 * pow(x[:,0], 2) + 1.13 * pow(x[:,1], 2) - 1.078 * pow(x[:,2], 2) - 5.989 * pow(x[:,3], 2) - 3.043 * pow(x[:,4], 2) + 0.0627 * pow(x[:,5], 2) - 4.958 * pow(x[:,6], 2) - 1.41 * pow(x[:,7], 2) + 0.3532 * pow(x[:,8], 2) ) def purch_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 43280 + 133.1 * x[:,0] + 780.400024 * x[:,1] - 1.501 * x[:,2] + 494 * x[:,3] + 191.2 * x[:,5] + 786 * x[:,6] + 102 * x[:,7] + 333.9 * x[:,8] + 25.95 * x[:,0] * x[:,1] - 2.442 * x[:,0] * x[:,2] + 28.280001 * x[:,0] * x[:,3] - 50.509998 * x[:,0] * x[:,4] + 11.55 * x[:,0] * x[:,5] - 6.188 * x[:,0] * x[:,6] - 4.326 * x[:,0] * x[:,7] + 13.78 * x[:,0] * x[:,8] - 3.335 * x[:,1] * x[:,2] + 0.4272 * x[:,1] * x[:,3] - 69.110001 * x[:,1] * x[:,4] - 331.8 * x[:,4] - 0.8834 * x[:,1] * x[:,5] + 7.221 * x[:,1] * x[:,6] - 20.389999 * x[:,1] * x[:,7] + 69.580002 * x[:,1] * x[:,8] - 1.107 * x[:,2] * x[:,3] + 7.078 * x[:,2] * x[:,4] + 0.0705 * x[:,2] * x[:,5] + 5.359 * x[:,2] * x[:,6] + 4.936 * x[:,2] * x[:,7] + 14.77 * x[:,2] * x[:,8] - 21.82 * x[:,3] * x[:,4] + 22.17 * x[:,3] * x[:,5] + 14.2 * x[:,3] * x[:,6] - 7.537 * x[:,3] * x[:,7] + 5.813 * x[:,3] * x[:,8] - 6.771 * x[:,4] * x[:,5] + 27.99 * x[:,4] * x[:,6] + 47.080002 * x[:,4] * x[:,7] - 9.888 * x[:,4] * x[:,8] + 3.135 * x[:,5] * x[:,6] - 2.658 * x[:,5] * x[:,7] + 1.033 * x[:,5] * x[:,8] + 82.230003 * x[:,6] * x[:,7] + 27.969999 * x[:,6] * x[:,8] + 16.110001 * x[:,7] * x[:,8] + 10.51 * pow(x[:,0], 2) - 49.189999 * pow(x[:,1], 2) + 26.51 * pow(x[:,2], 2) + 35.310001 * pow(x[:,3], 2) + 33.560001 * pow(x[:,4], 2) + 10.66 * pow(x[:,5], 2) + 74.309998 * pow(x[:,6], 2) + 8.461 * pow(x[:,7], 2) - 0.7392 * pow(x[:,8], 2) ) def range_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 1971 - 6.807 * x[:,0] - 76.230003 * x[:,1] + 2.885 * x[:,2] - 363.799988 * x[:,3] - 383.100006 * x[:,4] - 68.099998 * x[:,5] - 67.480003 * x[:,6] + 18.09 * x[:,7] - 165.699997 * x[:,8] + 0.084 * x[:,0] * x[:,1] + 0.2793 * x[:,0] * x[:,2] + 1.674 * x[:,0] * x[:,3] + 3.342 * x[:,0] * x[:,4] + 0.1543 * x[:,0] * x[:,5] - 0.4629 * x[:,0] * x[:,6] + 0.8574 * x[:,0] * x[:,7] + 2.537 * x[:,0] * x[:,8] + 0.0098 * x[:,1] * x[:,2] - 23.23 * x[:,1] * x[:,3] - 25.799999 * x[:,1] * x[:,4] - 1.787 * x[:,1] * x[:,5] + 9.432 * x[:,1] * x[:,6] - 1.912 * x[:,1] * x[:,7] - 40.200001 * x[:,1] * x[:,8] - 1.479 * x[:,2] * x[:,3] - 1.311 * x[:,2] * x[:,4] - 0.2168 * x[:,2] * x[:,5] - 0.7168 * x[:,2] * x[:,6] - 0.584 * x[:,2] * x[:,7] - 0.8652 * x[:,2] * x[:,8] + 121.099998 * x[:,3] * x[:,4] - 26.709999 * x[:,3] * x[:,5] + 25.280001 * x[:,3] * x[:,6] - 10.74 * x[:,3] * x[:,7] + 37.080002 * x[:,3] * x[:,8] + 21.290001 * x[:,4] * x[:,5] + 19.299999 * x[:,4] * x[:,6] - 4.318 * x[:,4] * x[:,7] - 20.360001 * x[:,4] * x[:,8] + 3.611 * x[:,5] * x[:,6] - 1.678 * x[:,5] * x[:,7] + 7.541 * x[:,5] * x[:,8] - 7.232 * x[:,6] * x[:,7] + 16.860001 * x[:,6] * x[:,8] - 3.006 * x[:,7] * x[:,8] - 11.61 * pow(x[:,0], 2) + 4.892 * pow(x[:,1], 2) - 11.61 * pow(x[:,2], 2) - 84.110001 * pow(x[:,3], 2) + 65.389999 * pow(x[:,4], 2) - 7.108 * pow(x[:,5], 2) - 15.61 * pow(x[:,6], 2) - 13.11 * pow(x[:,7], 2) + 8.892 * pow(x[:,8], 2) ) def ldmax_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 17.780001 + 0.4845 * x[:,0] + 1.625 * x[:,1] + 0.0267 * x[:,2] - 0.0153 * x[:,3] - 0.5289 * x[:,4] - 0.007 * x[:,5] - 0.4965 * x[:,6] + 0.2108 * x[:,7] + 0.0302 * x[:,8] + 0.0598 * x[:,0] * x[:,1] + 0.0019 * x[:,0] * x[:,2] - 0.0085 * x[:,0] * x[:,3] - 0.0146 * x[:,0] * x[:,4] - 0.0018 * x[:,0] * x[:,5] - 0.0014 * x[:,0] * x[:,6] + 0.0104 * x[:,0] * x[:,7] + 0.0044 * x[:,0] * x[:,8] + 0.0053 * x[:,1] * x[:,2] - 0.0024 * x[:,1] * x[:,3] - 0.0612 * x[:,1] * x[:,4] - 0.001 * x[:,1] * x[:,5] - 0.0517 * x[:,1] * x[:,6] + 0.0128 * x[:,1] * x[:,7] + 0.0043 * x[:,1] * x[:,8] - 0.0001 * x[:,2] * x[:,3] - 0.0054 * x[:,2] * x[:,4] + 0 * x[:,2] * x[:,5] - 0.0072 * x[:,2] * x[:,6] - 0.0039 * x[:,2] * x[:,7] + 0 * x[:,2] * x[:,8] + 0.0002 * x[:,3] * x[:,4] - 0.0012 * x[:,3] * x[:,5] + 0.0016 * x[:,3] * x[:,6] - 0.0001 * x[:,3] * x[:,7] + 0.0007 * x[:,3] * x[:,8] - 0.0001 * x[:,4] * x[:,5] - 0.0727 * x[:,4] * x[:,6] - 0.0256 * x[:,4] * x[:,7] - 0.0033 * x[:,4] * x[:,8] + 0.0008 * x[:,5] * x[:,6] - 0.0003 * x[:,5] * x[:,7] + 0.0003 * x[:,5] * x[:,8] - 0.0525 * x[:,6] * x[:,7] - 0.0071 * x[:,6] * x[:,8] - 0.0059 * x[:,7] * x[:,8] - 0.0897 * pow(x[:,0], 2) - 0.1488 * pow(x[:,1], 2) - 0.0116 * pow(x[:,2], 2) - 0.0009 * pow(x[:,3], 2) - 0.0305 * pow(x[:,7], 2) - 0.0009 * pow(x[:,8], 2) + 0.0157 * pow(x[:,4], 2) - 0.001 * pow(x[:,5], 2) - 0.0577 * pow(x[:,6], 2) ) def vcmax_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 200.4 - 0.3799 * x[:,0] + 0.8236 * x[:,1] + 0.2168 * x[:,2] + 1.74 * x[:,3] + 5.589 * x[:,4] - 0.1683 * x[:,5] - 3.522 * x[:,6] + 1.559 * x[:,7] + 0.2442 * x[:,8] - 0.0215 * x[:,0] * x[:,1] + 0.0054 * x[:,0] * x[:,2] - 0.0465 * x[:,0] * x[:,3] - 0.0144 * x[:,0] * x[:,4] - 0.0069 * x[:,0] * x[:,5] + 0.0578 * x[:,0] * x[:,6] + 0.0557 * x[:,0] * x[:,7] + 0.0221 * x[:,0] * x[:,8] + 0.0175 * x[:,1] * x[:,2] - 0.0942 * x[:,1] * x[:,3] + 0.1402 * x[:,1] * x[:,4] - 0.0079 * x[:,1] * x[:,5] + 0.0147 * x[:,1] * x[:,6] - 0.071 * x[:,1] * x[:,7] - 0.0104 * x[:,1] * x[:,8] - 0.0067 * x[:,2] * x[:,3] - 0.0306 * x[:,2] * x[:,4] - 0.0078 * x[:,2] * x[:,5] - 0.0534 * x[:,2] * x[:,6] - 0.0224 * x[:,2] * x[:,7] + 0.0026 * x[:,2] * x[:,8] - 0.2771 * x[:,3] * x[:,4] - 0.3476 * x[:,3] * x[:,5] + 0.2093 * x[:,3] * x[:,6] - 0.0864 * x[:,3] * x[:,7] - 0.0051 * x[:,3] * x[:,8] - 0.0948 * x[:,4] * x[:,5] - 0.7081 * x[:,4] * x[:,6] - 0.1219 * x[:,4] * x[:,7] - 0.016 * x[:,4] * x[:,8] + 0.0555 * x[:,5] * x[:,6] - 0.0342 * x[:,5] * x[:,7] - 0.0049 * x[:,5] * x[:,8] - 0.3658 * x[:,6] * x[:,7] - 0.046 * x[:,6] * x[:,8] - 0.0504 * x[:,7] * x[:,8] - 0.1452 * pow(x[:,0], 2) - 0.2937 * pow(x[:,1], 2) + 0.0303 * pow(x[:,2], 2) + 0.1378 * pow(x[:,3], 2) - 0.6522 * pow(x[:,4], 2) + 0.1378 * pow(x[:,5], 2) - 0.6102 * pow(x[:,6], 2) - 0.3722 * pow(x[:,7], 2) + 0.0303 * pow(x[:,8], 2) ) def noise_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 74.099998 - 0.0005 * x[:,9] - 0.0158 * x[:,10] + 0.0003 * x[:,11] + 0.9682 * x[:,12] + 0.0316 * x[:,13] - 0.0053 * x[:,14] - 0.0014 * x[:,15] - 0.0003 * x[:,16] + 0.0008 * x[:,17] + 0 * x[:,9] * x[:,11] - 0.0001 * x[:,9] * x[:,12] - 0.0001 * x[:,9] * x[:,13] - 0.0001 * x[:,9] * x[:,14] + 0.0001 * x[:,9] * x[:,16] + 0 * x[:,10] * x[:,11] - 0.0012 * x[:,10] * x[:,12] - 0.0014 * x[:,10] * x[:,13] - 0.0002 * x[:,10] * x[:,14] + 0.0002 * x[:,10] * x[:,16] + 0.0002 * x[:,10] * x[:,17] + 0 * x[:,11] * x[:,17] - 0.0003 * x[:,12] * x[:,13] + 0.0057 * x[:,12] * x[:,14] - 0.0001 * x[:,12] * x[:,15] + 0.0001 * x[:,12] * x[:,16] + 0.0002 * x[:,13] * x[:,14] - 0.0002 * x[:,13] * x[:,15] - 0.0001 * x[:,13] * x[:,16] + 0.0001 * x[:,13] * x[:,17] - 0.0001 * x[:,14] * x[:,15] + 0 * x[:,14] * x[:,17] - 0.0001 * x[:,15] * x[:,16] + 0.0008 * pow(x[:,9], 2) + 0.0016 * pow(x[:,10], 2) + 0.0011 * pow(x[:,11], 2) + 0.1104 * pow(x[:,12], 2) + 0.0003 * pow(x[:,13], 2) - 0.0019 * pow(x[:,14], 2) + 0.001 * pow(x[:,15], 2) + 0.001 * pow(x[:,16], 2) + 0.0007 * pow(x[:,17], 2) ) def wemp_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 1947 + 6.338 * x[:,9] + 33.869999 * x[:,10] - 0.448 * x[:,11] + 11 * x[:,12] - 30.85 * x[:,13] + 5.723 * x[:,14] + 53.220001 * x[:,15] + 1.896 * x[:,16] + 15.26 * x[:,17] + 1.963 * x[:,9] * x[:,10] - 0.1599 * x[:,9] * x[:,11] + 1.073 * x[:,9] * x[:,12] - 1.699 * x[:,9] * x[:,13] + 0.462 * x[:,9] * x[:,14] - 0.9528 * x[:,9] * x[:,15] - 0.9851 * x[:,9] * x[:,16] + 0.5956 * x[:,9] * x[:,17] + 0.0065 * x[:,10] * x[:,11] + 0.0874 * x[:,10] * x[:,12] - 3.447 * x[:,10] * x[:,13] + 0.1024 * x[:,10] * x[:,14] - 0.1814 * x[:,10] * x[:,15] + 0.7878 * x[:,10] * x[:,16] + 1.592 * x[:,10] * x[:,17] + 0.0288 * x[:,11] * x[:,12] + 0.3498 * x[:,11] * x[:,13] + 0.034 * x[:,11] * x[:,14] + 0.3134 * x[:,11] * x[:,15] + 0.2289 * x[:,11] * x[:,16] + 0.5603 * x[:,11] * x[:,17] - 0.1862 * x[:,12] * x[:,13] + 1.061 * x[:,12] * x[:,14] - 0.0774 * x[:,12] * x[:,15] - 0.2335 * x[:,12] * x[:,16] + 0.1385 * x[:,12] * x[:,17] - 0.0914 * x[:,13] * x[:,14] + 1.932 * x[:,13] * x[:,15] + 1.853 * x[:,13] * x[:,16] - 0.8019 * x[:,13] * x[:,17] - 0.0754 * x[:,14] * x[:,15] - 0.1306 * x[:,14] * x[:,16] + 0.1086 * x[:,14] * x[:,17] + 4.81 * x[:,15] * x[:,16] + 1.309 * x[:,15] * x[:,17] + 1.265 * x[:,16] * x[:,17] + 0.4046 * pow(x[:,9], 2) + 1.065 * pow(x[:,10], 2) + 0.7346 * pow(x[:,11], 2) + 0.4896 * pow(x[:,12], 2) + 5.815 * pow(x[:,13], 2) - 0.1304 * pow(x[:,14], 2) + 3.595 * pow(x[:,15], 2) + 0.6296 * pow(x[:,16], 2) + 1.26 * pow(x[:,17], 2) ) def doc_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 83.150002 + 12.02 * x[:,9] - 0.072 * x[:,10] - 0.0126 * x[:,11] + 3.428 * x[:,12] - 0.704 * x[:,13] + 0.7248 * x[:,14] + 0.7224 * x[:,15] - 0.1421 * x[:,16] + 0.0407 * x[:,17] + 0.613 * x[:,9] * x[:,10] + 0.046 * x[:,9] * x[:,11] + 1.155 * x[:,9] * x[:,12] + 0.7144 * x[:,9] * x[:,13] + 0.0944 * x[:,9] * x[:,14] - 0.8399 * x[:,9] * x[:,15] + 0.2251 * x[:,9] * x[:,16] + 0.0082 * x[:,9] * x[:,17] + 0.0082 * x[:,10] * x[:,11] + 0.1826 * x[:,10] * x[:,12] - 0.0606 * x[:,10] * x[:,13] - 0.2352 * x[:,10] * x[:,14] - 0.0486 * x[:,10] * x[:,15] + 0.0162 * x[:,10] * x[:,16] + 0.0211 * x[:,10] * x[:,17] + 0.0199 * x[:,11] * x[:,12] + 0.0088 * x[:,11] * x[:,13] - 0.0152 * x[:,11] * x[:,14] + 0.0082 * x[:,11] * x[:,15] - 0.0123 * x[:,11] * x[:,16] - 0.0142 * x[:,11] * x[:,17] + 0.1207 * x[:,12] * x[:,13] + 0.6576 * x[:,12] * x[:,14] - 0.2728 * x[:,12] * x[:,15] + 0.0435 * x[:,12] * x[:,16] - 0.0326 * x[:,12] * x[:,17] + 0.0196 * x[:,13] * x[:,14] + 0.0952 * x[:,13] * x[:,15] + 0.0351 * x[:,13] * x[:,16] + 0.0091 * x[:,13] * x[:,17] - 0.0628 * x[:,14] * x[:,15] - 0.0201 * x[:,14] * x[:,16] - 0.0244 * x[:,14] * x[:,17] + 0.0651 * x[:,15] * x[:,16] + 0.0048 * x[:,15] * x[:,17] - 0.0042 * x[:,16] * x[:,17] - 10.95 * pow(x[:,9], 2) - 0.2401 * pow(x[:,10], 2) - 0.2203 * pow(x[:,11], 2) + 5.223 * pow(x[:,12], 2) - 0.2669 * pow(x[:,13], 2) - 0.0884 * pow(x[:,14], 2) - 0.2169 * pow(x[:,15], 2) - 0.306 * pow(x[:,16], 2) - 0.2231 * pow(x[:,17], 2) ) def rough_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 2.191 - 0.0001 * x[:,9] + 0.1584 * x[:,10] - 0.0017 * x[:,11] + 0.0238 * x[:,12] - 0.1632 * x[:,13] - 0.0008 * x[:,14] - 0.0666 * x[:,15] - 0.0142 * x[:,16] + 0.0069 * x[:,17] - 0.0002 * x[:,9] * x[:,10] + 0.0001 * x[:,9] * x[:,11] + 0.0001 * x[:,9] * x[:,13] - 0.0002 * x[:,9] * x[:,14] + 0.0008 * x[:,9] * x[:,15] + 0.0005 * x[:,9] * x[:,16] - 0.0007 * x[:,9] * x[:,17] - 0.0003 * x[:,10] * x[:,11] + 0.0006 * x[:,10] * x[:,12] - 0.012 * x[:,10] * x[:,13] - 0.0003 * x[:,10] * x[:,14] - 0.0051 * x[:,10] * x[:,15] - 0.0037 * x[:,10] * x[:,16] + 0.0007 * x[:,10] * x[:,17] - 0.0002 * x[:,11] * x[:,12] - 0.0003 * x[:,11] * x[:,13] - 0.0001 * x[:,11] * x[:,14] - 0.0004 * x[:,11] * x[:,15] - 0.0002 * x[:,11] * x[:,16] - 0.0001 * x[:,11] * x[:,17] - 0.005 * x[:,12] * x[:,13] - 0.0037 * x[:,12] * x[:,14] + 0.0022 * x[:,12] * x[:,15] - 0.0008 * x[:,12] * x[:,16] - 0.0003 * x[:,12] * x[:,17] - 0.0008 * x[:,13] * x[:,14] - 0.0018 * x[:,13] * x[:,15] - 0.0012 * x[:,13] * x[:,16] - 0.0021 * x[:,13] * x[:,17] + 0.0009 * x[:,14] * x[:,15] - 0.0001 * x[:,14] * x[:,16] - 0.0002 * x[:,14] * x[:,17] - 0.0011 * x[:,15] * x[:,16] - 0.0012 * x[:,15] * x[:,17] - 0.0008 * x[:,16] * x[:,17] - 0.0001 * pow(x[:,9], 2) - 0.0302 * pow(x[:,10], 2) - 0.0015 * pow(x[:,11], 2) + 0.0041 * pow(x[:,12], 2) + 0.005 * pow(x[:,13], 2) + 0.0029 * pow(x[:,14], 2) + 0.0009 * pow(x[:,15], 2) - 0.0007 * pow(x[:,16], 2) - 0.0058 * pow(x[:,17], 2) ) def wfuel_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 385.5 - 6.707 * x[:,9] - 30.57 * x[:,10] + 0.5048 * x[:,11] - 18.91 * x[:,12] + 33.009998 * x[:,13] - 7.543 * x[:,14] - 55.169998 * x[:,15] - 1.447 * x[:,16] - 15.32 * x[:,17] - 1.938 * x[:,9] * x[:,10] + 0.18 * x[:,9] * x[:,11] - 1.201 * x[:,9] * x[:,12] + 1.434 * x[:,9] * x[:,13] - 0.5591 * x[:,9] * x[:,14] + 0.272 * x[:,9] * x[:,15] + 1.172 * x[:,9] * x[:,16] - 0.5566 * x[:,9] * x[:,17] - 0.0178 * x[:,10] * x[:,11] - 0.6466 * x[:,10] * x[:,12] + 3.714 * x[:,10] * x[:,13] - 0.1913 * x[:,10] * x[:,14] + 0.3522 * x[:,10] * x[:,15] - 0.828 * x[:,10] * x[:,16] - 1.633 * x[:,10] * x[:,17] - 0.0415 * x[:,11] * x[:,12] - 0.3772 * x[:,11] * x[:,13] - 0.0287 * x[:,11] * x[:,14] - 0.3237 * x[:,11] * x[:,15] - 0.2653 * x[:,11] * x[:,16] - 0.5519 * x[:,11] * x[:,17] + 0.5867 * x[:,12] * x[:,13] - 2.332 * x[:,12] * x[:,14] + 0.0168 * x[:,12] * x[:,15] + 0.2074 * x[:,12] * x[:,16] - 0.1206 * x[:,12] * x[:,17] + 0.3465 * x[:,13] * x[:,14] - 1.509 * x[:,13] * x[:,15] - 2.134 * x[:,13] * x[:,16] + 0.7418 * x[:,13] * x[:,17] - 0.0803 * x[:,14] * x[:,15] + 0.1825 * x[:,14] * x[:,16] - 0.1052 * x[:,14] * x[:,17] - 4.86 * x[:,15] * x[:,16] - 1.355 * x[:,15] * x[:,17] - 1.289 * x[:,16] * x[:,17] + 0.1451 * pow(x[:,9], 2) - 1.698 * pow(x[:,10], 2) - 0.6064 * pow(x[:,11], 2) - 6.025 * pow(x[:,12], 2) - 4.978 * pow(x[:,13], 2) + 0.2611 * pow(x[:,14], 2) - 3.229 * pow(x[:,15], 2) - 0.4999 * pow(x[:,16], 2) - 1.068 * pow(x[:,17], 2) ) def purch_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 43730 + 142.5 * x[:,9] + 756.5 * x[:,10] + 2.004 * x[:,11] + 504.799988 * x[:,12] - 314.799988 * x[:,13] + 194.100006 * x[:,14] + 890.5 * x[:,15] + 114.099998 * x[:,16] + 334.5 * x[:,17] + 43.029999 * x[:,9] * x[:,10] - 2.865 * x[:,9] * x[:,11] + 27.42 * x[:,9] * x[:,12] - 35.060001 * x[:,9] * x[:,13] + 13.28 * x[:,9] * x[:,14] - 17.02 * x[:,9] * x[:,15] - 18.83 * x[:,9] * x[:,16] + 14.26 * x[:,9] * x[:,17] + 0.8277 * x[:,10] * x[:,11] + 3.724 * x[:,10] * x[:,12] - 60.380001 * x[:,10] * x[:,13] + 3.039 * x[:,10] * x[:,14] + 7.395 * x[:,10] * x[:,15] + 18.809999 * x[:,10] * x[:,16] + 35.360001 * x[:,10] * x[:,17] - 0.0758 * x[:,11] * x[:,12] + 6.451 * x[:,11] * x[:,13] + 0.5043 * x[:,11] * x[:,14] + 4.745 * x[:,11] * x[:,15] + 3.97 * x[:,11] * x[:,16] + 11.97 * x[:,11] * x[:,17] - 20.6 * x[:,12] * x[:,13] + 20.549999 * x[:,12] * x[:,14] + 18.09 * x[:,12] * x[:,15] - 7.554 * x[:,12] * x[:,16] + 5.429 * x[:,12] * x[:,17] - 8.093 * x[:,13] * x[:,14] + 2.433 * x[:,13] * x[:,15] + 29.82 * x[:,13] * x[:,16] - 17.860001 * x[:,13] * x[:,17] + 3.676 * x[:,14] * x[:,15] - 3.442 * x[:,14] * x[:,16] + 2.995 * x[:,14] * x[:,17] + 86.110001 * x[:,15] * x[:,16] + 29.129999 * x[:,15] * x[:,17] + 26.49 * x[:,16] * x[:,17] - 1.456 * pow(x[:,9], 2) + 16.049999 * pow(x[:,10], 2) - 0.7055 * pow(x[:,11], 2) + 45.990002 * pow(x[:,12], 2) + 87.14 * pow(x[:,13], 2) + 0.8945 * pow(x[:,14], 2) + 51.650002 * pow(x[:,15], 2) - 2.256 * pow(x[:,16], 2) + 25.59 * pow(x[:,17], 2) ) def range_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 1941 - 6.768 * x[:,9] - 68.910004 * x[:,10] + 2.315 * x[:,11] - 346.799988 * x[:,12] - 365 * x[:,13] - 65.25 * x[:,14] - 77.599998 * x[:,15] + 13.19 * x[:,16] - 155.300003 * x[:,17] + 0.1113 * x[:,9] * x[:,10] + 0.2207 * x[:,9] * x[:,11] + 1.229 * x[:,9] * x[:,12] + 3.721 * x[:,9] * x[:,13] + 0.0176 * x[:,9] * x[:,14] - 0.0527 * x[:,9] * x[:,15] + 0.6777 * x[:,9] * x[:,16] + 2.674 * x[:,9] * x[:,17] + 0.0762 * x[:,10] * x[:,11] - 24.07 * x[:,10] * x[:,12] - 31.309999 * x[:,10] * x[:,13] - 1.979 * x[:,10] * x[:,14] + 11.8 * x[:,10] * x[:,15] - 0.623 * x[:,10] * x[:,16] - 38.310001 * x[:,10] * x[:,17] - 1.15 * x[:,11] * x[:,12] - 0.9785 * x[:,11] * x[:,13] - 0.2051 * x[:,11] * x[:,14] - 0.5879 * x[:,11] * x[:,15] - 0.4512 * x[:,11] * x[:,16] - 0.7754 * x[:,11] * x[:,17] + 115.400002 * x[:,12] * x[:,13] - 26.84 * x[:,12] * x[:,14] + 27.91 * x[:,12] * x[:,15] - 7.897 * x[:,12] * x[:,16] + 34.349998 * x[:,12] * x[:,17] + 20.610001 * x[:,13] * x[:,14] + 28.92 * x[:,13] * x[:,15] - 3.006 * x[:,13] * x[:,16] - 27.870001 * x[:,13] * x[:,17] + 4.107 * x[:,14] * x[:,15] - 1.17 * x[:,14] * x[:,16] + 7.186 * x[:,14] * x[:,17] - 7.389 * x[:,15] * x[:,16] + 18.02 * x[:,15] * x[:,17] - 2.451 * x[:,16] * x[:,17] - 12.83 * pow(x[:,9], 2) + 4.667 * pow(x[:,10], 2) - 12.33 * pow(x[:,11], 2) - 85.330002 * pow(x[:,12], 2) + 57.169998 * pow(x[:,13], 2) - 8.833 * pow(x[:,14], 2) - 16.33 * pow(x[:,15], 2) - 13.33 * pow(x[:,16], 2) + 8.167 * pow(x[:,17], 2) ) def ldmax_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 17.43 + 0.4811 * x[:,9] + 1.584 * x[:,10] + 0.0212 * x[:,11] - 0.0128 * x[:,12] - 0.5456 * x[:,13] - 0.0054 * x[:,14] - 0.4984 * x[:,15] + 0.1607 * x[:,16] + 0.0288 * x[:,17] + 0.0635 * x[:,9] * x[:,10] + 0.0013 * x[:,9] * x[:,11] - 0.0078 * x[:,9] * x[:,12] - 0.0123 * x[:,9] * x[:,13] - 0.0011 * x[:,9] * x[:,14] - 0.0065 * x[:,9] * x[:,15] + 0.0049 * x[:,9] * x[:,16] + 0.0038 * x[:,9] * x[:,17] + 0.0038 * x[:,10] * x[:,11] - 0.0014 * x[:,10] * x[:,12] - 0.0601 * x[:,10] * x[:,13] - 0.0003 * x[:,10] * x[:,14] - 0.0503 * x[:,10] * x[:,15] + 0.017 * x[:,10] * x[:,16] - 0.0029 * x[:,10] * x[:,17] + 0.0002 * x[:,11] * x[:,12] - 0.0032 * x[:,11] * x[:,13] + 0.0001 * x[:,11] * x[:,14] - 0.0043 * x[:,11] * x[:,15] - 0.0021 * x[:,11] * x[:,16] - 0.0001 * x[:,11] * x[:,17] - 0.0007 * x[:,12] * x[:,13] - 0.0015 * x[:,12] * x[:,14] + 0.0009 * x[:,12] * x[:,15] - 0.0002 * x[:,12] * x[:,16] + 0.0008 * x[:,12] * x[:,17] - 0.0008 * x[:,13] * x[:,14] - 0.0682 * x[:,13] * x[:,15] - 0.0243 * x[:,13] * x[:,16] - 0.0047 * x[:,13] * x[:,17] + 0 * x[:,14] * x[:,15] - 0.0004 * x[:,14] * x[:,16] + 0.0007 * x[:,14] * x[:,17] - 0.0406 * x[:,15] * x[:,16] - 0.0052 * x[:,15] * x[:,17] - 0.0018 * x[:,16] * x[:,17] - 0.0923 * pow(x[:,9], 2) - 0.1312 * pow(x[:,10], 2) - 0.0127 * pow(x[:,11], 2) - 0.0041 * pow(x[:,12], 2) + 0.0304 * pow(x[:,13], 2) - 0.0044 * pow(x[:,14], 2) - 0.0545 * pow(x[:,15], 2) - 0.0239 * pow(x[:,16], 2) + 0.0066 * pow(x[:,17], 2) ) def vcmax_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 197.800003 - 0.3562 * x[:,9] + 0.7729 * x[:,10] + 0.1807 * x[:,11] + 1.886 * x[:,12] + 5.332 * x[:,13] - 0.1262 * x[:,14] - 3.585 * x[:,15] + 1.18 * x[:,16] + 0.2323 * x[:,17] + 0.0123 * x[:,9] * x[:,10] + 0.0073 * x[:,9] * x[:,11] - 0.0462 * x[:,9] * x[:,12] + 0.0075 * x[:,9] * x[:,13] - 0.003 * x[:,9] * x[:,14] + 0.0375 * x[:,9] * x[:,15] + 0.0225 * x[:,9] * x[:,16] + 0.017 * x[:,9] * x[:,17] + 0.0071 * x[:,10] * x[:,11] - 0.0914 * x[:,10] * x[:,12] + 0.1716 * x[:,10] * x[:,13] - 0.0115 * x[:,10] * x[:,14] + 0.0278 * x[:,10] * x[:,15] - 0.0074 * x[:,10] * x[:,16] - 0.0583 * x[:,10] * x[:,17] - 0.0124 * x[:,11] * x[:,12] - 0.0116 * x[:,11] * x[:,13] - 0.0041 * x[:,11] * x[:,14] - 0.0337 * x[:,11] * x[:,15] - 0.0132 * x[:,11] * x[:,16] + 0.0028 * x[:,11] * x[:,17] - 0.2578 * x[:,12] * x[:,13] - 0.3341 * x[:,12] * x[:,14] + 0.2057 * x[:,12] * x[:,15] - 0.0696 * x[:,12] * x[:,16] - 0.0125 * x[:,12] * x[:,17] - 0.1043 * x[:,13] * x[:,14] - 0.6842 * x[:,13] * x[:,15] - 0.1276 * x[:,13] * x[:,16] - 0.0217 * x[:,13] * x[:,17] + 0.0663 * x[:,14] * x[:,15] - 0.0185 * x[:,14] * x[:,16] + 0.0001 * x[:,14] * x[:,17] - 0.2758 * x[:,15] * x[:,16] - 0.039 * x[:,15] * x[:,17] - 0.0162 * x[:,16] * x[:,17] - 0.1479 * pow(x[:,9], 2) - 0.1989 * pow(x[:,10], 2) - 0.2574 * pow(x[:,11], 2) + 0.3991 * pow(x[:,12], 2) - 0.5109 * pow(x[:,13], 2) + 0.0706 * pow(x[:,14], 2) - 0.4174 * pow(x[:,15], 2) - 0.2574 * pow(x[:,16], 2) - 0.0384 * pow(x[:,17], 2) ) def noise_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 74.099998 - 0.0004 * x[:,18] - 0.0156 * x[:,19] + 0.0003 * x[:,20] + 0.9682 * x[:,21] + 0.0314 * x[:,22] - 0.0053 * x[:,23] - 0.0015 * x[:,24] - 0.0004 * x[:,25] + 0.0007 * x[:,26] + 0 * x[:,18] * x[:,19] + 0 * x[:,18] * x[:,20] - 0.0001 * x[:,18] * x[:,21] - 0.0001 * x[:,18] * x[:,22] - 0.0001 * x[:,18] * x[:,23] + 0 * x[:,19] * x[:,20] - 0.0013 * x[:,19] * x[:,21] - 0.0014 * x[:,19] * x[:,22] - 0.0002 * x[:,19] * x[:,23] - 0.0001 * x[:,19] * x[:,24] + 0.0002 * x[:,19] * x[:,25] + 0.0002 * x[:,19] * x[:,26] + 0 * x[:,20] * x[:,26] - 0.0003 * x[:,21] * x[:,22] + 0.0057 * x[:,21] * x[:,23] - 0.0002 * x[:,21] * x[:,24] + 0.0001 * x[:,21] * x[:,25] - 0.0001 * x[:,21] * x[:,26] + 0.0002 * x[:,22] * x[:,23] - 0.0002 * x[:,22] * x[:,24] - 0.0002 * x[:,22] * x[:,25] + 0.0001 * x[:,22] * x[:,26] - 0.0001 * x[:,23] * x[:,24] + 0 * x[:,23] * x[:,25] + 0 * x[:,23] * x[:,26] - 0.0001 * x[:,24] * x[:,25] + 0.0006 * pow(x[:,18], 2) + 0.0017 * pow(x[:,19], 2) + 0.0011 * pow(x[:,20], 2) + 0.1103 * pow(x[:,21], 2) + 0.0004 * pow(x[:,22], 2) - 0.0021 * pow(x[:,23], 2) + 0.001 * pow(x[:,24], 2) + 0.001 * pow(x[:,25], 2) + 0.0008 * pow(x[:,26], 2) ) def wemp_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 1972 + 5.386 * x[:,18] + 33.290001 * x[:,19] - 0.0222 * x[:,20] + 10.82 * x[:,21] - 28.889999 * x[:,22] + 5.588 * x[:,23] + 61.32 * x[:,24] + 4.65 * x[:,25] + 16.620001 * x[:,26] + 1.32 * x[:,18] * x[:,19] - 0.2549 * x[:,18] * x[:,20] + 0.9089 * x[:,18] * x[:,21] - 1.403 * x[:,18] * x[:,22] + 0.3601 * x[:,18] * x[:,23] - 0.0118 * x[:,18] * x[:,24] + 0.0123 * x[:,18] * x[:,25] + 0.4761 * x[:,18] * x[:,26] + 0.0455 * x[:,19] * x[:,20] - 0.0596 * x[:,19] * x[:,21] - 3.818 * x[:,19] * x[:,22] - 0.0408 * x[:,19] * x[:,23] + 0.5044 * x[:,19] * x[:,24] + 0.2867 * x[:,19] * x[:,25] + 2.497 * x[:,19] * x[:,26] + 0.0011 * x[:,20] * x[:,21] + 0.151 * x[:,20] * x[:,22] + 0.0524 * x[:,20] * x[:,23] + 0.1164 * x[:,20] * x[:,24] + 0.0491 * x[:,20] * x[:,25] + 0.391 * x[:,20] * x[:,26] + 0.1823 * x[:,21] * x[:,22] + 1.254 * x[:,21] * x[:,23] + 0.0491 * x[:,21] * x[:,24] + 0.1011 * x[:,21] * x[:,25] + 0.0538 * x[:,21] * x[:,26] + 0.098 * x[:,22] * x[:,23] + 1.807 * x[:,22] * x[:,24] + 1.119 * x[:,22] * x[:,25] - 1.437 * x[:,22] * x[:,26] + 0.0664 * x[:,23] * x[:,24] + 0.0566 * x[:,23] * x[:,25] + 0.0508 * x[:,23] * x[:,26] + 2.914 * x[:,24] * x[:,25] + 0.0969 * x[:,24] * x[:,26] - 0.1483 * x[:,25] * x[:,26] + 1.446 * pow(x[:,18], 2) - 2.524 * pow(x[:,19], 2) + 1.646 * pow(x[:,20], 2) + 1.381 * pow(x[:,21], 2) + 2.651 * pow(x[:,22], 2) + 0.7561 * pow(x[:,23], 2) + 3.116 * pow(x[:,24], 2) + 1.211 * pow(x[:,25], 2) - 0.4489 * pow(x[:,26], 2) ) def doc_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 83.260002 + 11.86 * x[:,18] - 0.0805 * x[:,19] - 0.0218 * x[:,20] + 3.345 * x[:,21] - 0.6443 * x[:,22] + 0.7039 * x[:,23] + 0.8256 * x[:,24] - 0.0905 * x[:,25] + 0.0305 * x[:,26] + 0.6 * x[:,18] * x[:,19] + 0.0284 * x[:,18] * x[:,20] + 1.109 * x[:,18] * x[:,21] + 0.6928 * x[:,18] * x[:,22] + 0.0795 * x[:,18] * x[:,23] - 0.9926 * x[:,18] * x[:,24] + 0.1119 * x[:,18] * x[:,25] - 0.0183 * x[:,18] * x[:,26] + 0.0018 * x[:,19] * x[:,20] + 0.1731 * x[:,19] * x[:,21] - 0.0631 * x[:,19] * x[:,22] - 0.246 * x[:,19] * x[:,23] - 0.0581 * x[:,19] * x[:,24] - 0.0008 * x[:,19] * x[:,25] - 0.0048 * x[:,19] * x[:,26] + 0.0024 * x[:,20] * x[:,21] + 0.0011 * x[:,20] * x[:,22] - 0.0043 * x[:,20] * x[:,23] + 0.0048 * x[:,20] * x[:,24] - 0.0019 * x[:,20] * x[:,25] + 0.0025 * x[:,20] * x[:,26] + 0.1331 * x[:,21] * x[:,22] + 0.6487 * x[:,21] * x[:,23] - 0.353 * x[:,21] * x[:,24] - 0.0025 * x[:,21] * x[:,25] - 0.0586 * x[:,21] * x[:,26] + 0.005 * x[:,22] * x[:,23] + 0.1121 * x[:,22] * x[:,24] + 0.0345 * x[:,22] * x[:,25] + 0.0103 * x[:,22] * x[:,26] - 0.0674 * x[:,23] * x[:,24] + 0.0003 * x[:,23] * x[:,25] - 0.0133 * x[:,23] * x[:,26] + 0.0316 * x[:,24] * x[:,25] - 0.0007 * x[:,24] * x[:,26] + 0.0063 * x[:,25] * x[:,26] - 10.77 * pow(x[:,18], 2) - 0.288 * pow(x[:,19], 2) - 0.288 * pow(x[:,20], 2) + 5.182 * pow(x[:,21], 2) - 0.2313 * pow(x[:,22], 2) - 0.0895 * pow(x[:,23], 2) - 0.2136 * pow(x[:,24], 2) - 0.2562 * pow(x[:,25], 2) - 0.2686 * pow(x[:,26], 2) ) def rough_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 2.161 + 0.0007 * x[:,18] + 0.156 * x[:,19] - 0.0022 * x[:,20] + 0.0239 * x[:,21] - 0.1649 * x[:,22] - 0.0007 * x[:,23] - 0.0675 * x[:,24] - 0.0135 * x[:,25] + 0.0056 * x[:,26] + 0.0006 * x[:,18] * x[:,19] + 0.0001 * x[:,18] * x[:,20] + 0.0001 * x[:,18] * x[:,21] + 0 * x[:,18] * x[:,24] - 0.0003 * x[:,18] * x[:,25] - 0.0003 * x[:,18] * x[:,26] - 0.0003 * x[:,19] * x[:,20] + 0.0008 * x[:,19] * x[:,21] - 0.0119 * x[:,19] * x[:,22] + 0 * x[:,19] * x[:,23] - 0.0054 * x[:,19] * x[:,24] - 0.0026 * x[:,19] * x[:,25] - 0.0003 * x[:,19] * x[:,26] - 0.0002 * x[:,20] * x[:,21] - 0.0002 * x[:,20] * x[:,22] - 0.0001 * x[:,20] * x[:,23] - 0.0002 * x[:,20] * x[:,24] - 0.0002 * x[:,20] * x[:,25] + 0.0001 * x[:,20] * x[:,26] - 0.0051 * x[:,21] * x[:,22] - 0.0038 * x[:,21] * x[:,23] + 0.0024 * x[:,21] * x[:,24] - 0.0009 * x[:,21] * x[:,25] - 0.0002 * x[:,21] * x[:,26] - 0.001 * x[:,22] * x[:,23] - 0.0018 * x[:,22] * x[:,24] - 0.0009 * x[:,22] * x[:,25] - 0.0017 * x[:,22] * x[:,26] + 0.0009 * x[:,23] * x[:,24] - 0.0002 * x[:,23] * x[:,25] - 0.0001 * x[:,23] * x[:,26] - 0.0005 * x[:,24] * x[:,25] - 0.0001 * x[:,24] * x[:,26] + 0.0003 * x[:,25] * x[:,26] - 0.0006 * pow(x[:,18], 2) - 0.0255 * pow(x[:,19], 2) - 0.0043 * pow(x[:,20], 2) + 0.0039 * pow(x[:,21], 2) + 0.0092 * pow(x[:,22], 2) + 0.0014 * pow(x[:,23], 2) + 0.0003 * pow(x[:,24], 2) - 0.0007 * pow(x[:,25], 2) - 0.0052 * pow(x[:,26], 2) ) def wfuel_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 359.700012 - 5.78 * x[:,18] - 29.99 * x[:,19] + 0.0682 * x[:,20] - 18.709999 * x[:,21] + 31 * x[:,22] - 7.332 * x[:,23] - 63.599998 * x[:,24] - 4.44 * x[:,25] - 16.709999 * x[:,26] - 1.317 * x[:,18] * x[:,19] + 0.2715 * x[:,18] * x[:,20] - 1.069 * x[:,18] * x[:,21] + 1.185 * x[:,18] * x[:,22] - 0.3931 * x[:,18] * x[:,23] - 0.8091 * x[:,18] * x[:,24] + 0.0543 * x[:,18] * x[:,25] - 0.448 * x[:,18] * x[:,26] - 0.0418 * x[:,19] * x[:,20] - 0.5179 * x[:,19] * x[:,21] + 4.113 * x[:,19] * x[:,22] - 0.0407 * x[:,19] * x[:,23] - 0.3222 * x[:,19] * x[:,24] - 0.3059 * x[:,19] * x[:,25] - 2.526 * x[:,19] * x[:,26] - 0.0077 * x[:,20] * x[:,21] - 0.1761 * x[:,20] * x[:,22] - 0.0543 * x[:,20] * x[:,23] - 0.1319 * x[:,20] * x[:,24] - 0.0633 * x[:,20] * x[:,25] - 0.3999 * x[:,20] * x[:,26] + 0.2791 * x[:,21] * x[:,22] - 2.456 * x[:,21] * x[:,23] - 0.1367 * x[:,21] * x[:,24] - 0.155 * x[:,21] * x[:,25] - 0.0405 * x[:,21] * x[:,26] + 0.0736 * x[:,22] * x[:,23] - 1.298 * x[:,22] * x[:,24] - 1.258 * x[:,22] * x[:,25] + 1.389 * x[:,22] * x[:,26] - 0.1952 * x[:,23] * x[:,24] - 0.0011 * x[:,23] * x[:,25] - 0.0391 * x[:,23] * x[:,26] - 2.965 * x[:,24] * x[:,25] - 0.1262 * x[:,24] * x[:,26] + 0.1433 * x[:,25] * x[:,26] - 0.8956 * pow(x[:,18], 2) + 1.729 * pow(x[:,19], 2) - 1.613 * pow(x[:,20], 2) - 6.309 * pow(x[:,21], 2) - 1.949 * pow(x[:,22], 2) - 0.6581 * pow(x[:,23], 2) - 2.723 * pow(x[:,24], 2) - 1.181 * pow(x[:,25], 2) + 0.5244 * pow(x[:,26], 2) ) def purch_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 44220 + 124.400002 * x[:,18] + 749.200012 * x[:,19] + 9.32 * x[:,20] + 506.899994 * x[:,21] - 290.600006 * x[:,22] + 192.800003 * x[:,23] + 1034 * x[:,24] + 144.5 * x[:,25] + 364.799988 * x[:,26] + 27.370001 * x[:,18] * x[:,19] - 5.918 * x[:,18] * x[:,20] + 24.51 * x[:,18] * x[:,21] - 29.690001 * x[:,18] * x[:,22] + 10.97 * x[:,18] * x[:,23] + 2.652 * x[:,18] * x[:,24] + 2.262 * x[:,18] * x[:,25] + 11.44 * x[:,18] * x[:,26] + 2.046 * x[:,19] * x[:,20] + 0.2715 * x[:,19] * x[:,21] - 67.760002 * x[:,19] * x[:,22] - 0.3336 * x[:,19] * x[:,23] + 25.07 * x[:,19] * x[:,24] + 7.377 * x[:,19] * x[:,25] + 56.369999 * x[:,19] * x[:,26] - 0.1879 * x[:,20] * x[:,21] + 1.594 * x[:,20] * x[:,22] + 1.086 * x[:,20] * x[:,23] + 1.375 * x[:,20] * x[:,24] + 0.4313 * x[:,20] * x[:,25] + 8.3 * x[:,20] * x[:,26] - 11.7 * x[:,21] * x[:,22] + 24.440001 * x[:,21] * x[:,23] + 23.85 * x[:,21] * x[:,24] + 1.195 * x[:,21] * x[:,25] + 3.797 * x[:,21] * x[:,26] - 3.027 * x[:,22] * x[:,23] + 4.452 * x[:,22] * x[:,24] + 18.059999 * x[:,22] * x[:,25] - 30.709999 * x[:,22] * x[:,26] + 7.103 * x[:,23] * x[:,24] + 1.01 * x[:,23] * x[:,25] + 1.463 * x[:,23] * x[:,26] + 53.560001 * x[:,24] * x[:,25] + 4.063 * x[:,24] * x[:,26] - 3.483 * x[:,25] * x[:,26] + 15.24 * pow(x[:,18], 2) - 71.910004 * pow(x[:,19], 2) + 33.990002 * pow(x[:,20], 2) + 60.540001 * pow(x[:,21], 2) + 15.24 * pow(x[:,22], 2) + 28.49 * pow(x[:,23], 2) + 50.490002 * pow(x[:,24], 2) + 18.190001 * pow(x[:,25], 2) - 9.011 * pow(x[:,26], 2) ) def range_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 1932 - 6.389 * x[:,18] - 64.400002 * x[:,19] + 1.778 * x[:,20] - 342.799988 * x[:,21] - 356.399994 * x[:,22] - 64.639999 * x[:,23] - 91.739998 * x[:,24] + 5.658 * x[:,25] - 150.5 * x[:,26] - 0.2363 * x[:,18] * x[:,19] + 0.0566 * x[:,18] * x[:,20] + 1.346 * x[:,18] * x[:,21] + 3.529 * x[:,18] * x[:,22] + 0.0215 * x[:,18] * x[:,23] - 0.291 * x[:,18] * x[:,24] + 0.0293 * x[:,18] * x[:,25] + 2.416 * x[:,18] * x[:,26] + 0.0449 * x[:,19] * x[:,20] - 24.780001 * x[:,19] * x[:,21] - 35.150002 * x[:,19] * x[:,22] - 2.131 * x[:,19] * x[:,23] + 13.65 * x[:,19] * x[:,24] - 0.0059 * x[:,19] * x[:,25] - 35.599998 * x[:,19] * x[:,26] - 0.9512 * x[:,20] * x[:,21] - 0.6113 * x[:,20] * x[:,22] - 0.166 * x[:,20] * x[:,23] - 0.3457 * x[:,20] * x[:,24] - 0.1191 * x[:,20] * x[:,25] - 0.5762 * x[:,20] * x[:,26] + 114.300003 * x[:,21] * x[:,22] - 26.83 * x[:,21] * x[:,23] + 33.290001 * x[:,21] * x[:,24] - 4.76 * x[:,21] * x[:,25] + 33.189999 * x[:,21] * x[:,26] + 20.6 * x[:,22] * x[:,23] + 38.630001 * x[:,22] * x[:,24] + 0.4238 * x[:,22] * x[:,25] - 31.940001 * x[:,22] * x[:,26] + 5.057 * x[:,23] * x[:,24] - 0.8809 * x[:,23] * x[:,25] + 6.873 * x[:,23] * x[:,26] - 3.928 * x[:,24] * x[:,25] + 20.360001 * x[:,24] * x[:,26] + 0.0918 * x[:,25] * x[:,26] - 11.73 * pow(x[:,18], 2) + 4.268 * pow(x[:,19], 2) - 10.73 * pow(x[:,20], 2) - 83.730003 * pow(x[:,21], 2) + 39.27 * pow(x[:,22], 2) - 7.232 * pow(x[:,23], 2) - 14.23 * pow(x[:,24], 2) - 11.73 * pow(x[:,25], 2) + 9.268 * pow(x[:,26], 2) ) def ldmax_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 17.34 + 0.4817 * x[:,18] + 1.573 * x[:,19] + 0.0179 * x[:,20] - 0.0117 * x[:,21] - 0.5804 * x[:,22] - 0.0053 * x[:,23] - 0.5638 * x[:,24] + 0.0986 * x[:,25] + 0.0278 * x[:,26] + 0.0603 * x[:,18] * x[:,19] + 0.0004 * x[:,18] * x[:,20] - 0.0074 * x[:,18] * x[:,21] - 0.0132 * x[:,18] * x[:,22] - 0.0014 * x[:,18] * x[:,23] - 0.0059 * x[:,18] * x[:,24] + 0.0053 * x[:,18] * x[:,25] + 0.0024 * x[:,18] * x[:,26] + 0.0032 * x[:,19] * x[:,20] - 0.0021 * x[:,19] * x[:,21] - 0.0632 * x[:,19] * x[:,22] - 0.0009 * x[:,19] * x[:,23] - 0.0553 * x[:,19] * x[:,24] + 0.0072 * x[:,19] * x[:,25] + 0.0011 * x[:,19] * x[:,26] + 0.0002 * x[:,20] * x[:,21] - 0.0028 * x[:,20] * x[:,22] + 0 * x[:,20] * x[:,23] - 0.0035 * x[:,20] * x[:,24] - 0.0016 * x[:,20] * x[:,25] - 0.0006 * x[:,20] * x[:,26] + 0.0003 * x[:,21] * x[:,22] - 0.0006 * x[:,21] * x[:,23] + 0.0014 * x[:,21] * x[:,24] + 0.001 * x[:,21] * x[:,25] + 0.0004 * x[:,21] * x[:,26] - 0.0001 * x[:,22] * x[:,23] - 0.0563 * x[:,22] * x[:,24] - 0.0173 * x[:,22] * x[:,25] - 0.0049 * x[:,22] * x[:,26] + 0.0006 * x[:,23] * x[:,24] + 0.0004 * x[:,23] * x[:,25] + 0.0001 * x[:,23] * x[:,26] - 0.0254 * x[:,24] * x[:,25] - 0.0069 * x[:,24] * x[:,26] - 0.0037 * x[:,25] * x[:,26] - 0.0838 * pow(x[:,18], 2) - 0.1499 * pow(x[:,19], 2) - 0.0058 * pow(x[:,20], 2) + 0.0016 * pow(x[:,21], 2) + 0.0214 * pow(x[:,22], 2) + 0.0013 * pow(x[:,23], 2) - 0.0337 * pow(x[:,24], 2) - 0.0133 * pow(x[:,25], 2) + 0.0028 * pow(x[:,26], 2) ) def vcmax_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) return ( 197.100006 - 0.3331 * x[:,18] + 0.7564 * x[:,19] + 0.153 * x[:,20] + 1.918 * x[:,21] + 5.044 * x[:,22] - 0.1139 * x[:,23] - 4.07 * x[:,24] + 0.7276 * x[:,25] + 0.2242 * x[:,26] - 0.0231 * x[:,18] * x[:,19] - 0.009 * x[:,18] * x[:,20] - 0.0365 * x[:,18] * x[:,21] - 0.0011 * x[:,18] * x[:,22] - 0.0064 * x[:,18] * x[:,23] + 0.0355 * x[:,18] * x[:,24] + 0.028 * x[:,18] * x[:,25] + 0.013 * x[:,18] * x[:,26] + 0.013 * x[:,19] * x[:,20] - 0.0947 * x[:,19] * x[:,21] + 0.1791 * x[:,19] * x[:,22] - 0.0178 * x[:,19] * x[:,23] + 0.0598 * x[:,19] * x[:,24] - 0.0216 * x[:,19] * x[:,25] - 0.0274 * x[:,19] * x[:,26] - 0.006 * x[:,20] * x[:,21] - 0.0243 * x[:,20] * x[:,22] - 0.001 * x[:,20] * x[:,23] - 0.0233 * x[:,20] * x[:,24] - 0.0108 * x[:,20] * x[:,25] - 0.0011 * x[:,20] * x[:,26] - 0.2368 * x[:,21] * x[:,22] - 0.334 * x[:,21] * x[:,23] + 0.2329 * x[:,21] * x[:,24] - 0.0419 * x[:,21] * x[:,25] - 0.0148 * x[:,21] * x[:,26] - 0.0851 * x[:,22] * x[:,23] - 0.6179 * x[:,22] * x[:,24] - 0.0865 * x[:,22] * x[:,25] - 0.0158 * x[:,22] * x[:,26] + 0.0691 * x[:,23] * x[:,24] - 0.0088 * x[:,23] * x[:,25] - 0.0056 * x[:,23] * x[:,26] - 0.1699 * x[:,24] * x[:,25] - 0.0462 * x[:,24] * x[:,26] - 0.028 * x[:,25] * x[:,26] - 0.2315 * pow(x[:,18], 2) - 0.384 * pow(x[:,19], 2) - 0.013 * pow(x[:,20], 2) + 0.315 * pow(x[:,21], 2) - 0.612 * pow(x[:,22], 2) + 0.206 * pow(x[:,23], 2) - 0.2825 * pow(x[:,24], 2) - 0.1225 * pow(x[:,25], 2) - 0.013 * pow(x[:,26], 2) ) # Objective functions def f_1(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[noise_2(x)],[noise_4(x)],[noise_6(x)]]) return( np.amax(a, axis=0) ) def f_2(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[wemp_2(x)],[wemp_4(x)],[wemp_6(x)]]) return( np.amax(a, axis=0) ) def f_3(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[doc_2(x)],[doc_4(x)],[doc_6(x)]]) return( np.amax(a, axis=0) ) def f_4(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[rough_2(x)],[rough_4(x)],[rough_6(x)]]) return( np.amax(a, axis=0) ) def f_5(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[wfuel_2(x)],[wfuel_4(x)],[wfuel_6(x)]]) return( np.amax(a, axis=0) ) def f_6(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[purch_2(x)],[purch_4(x)],[purch_6(x)]]) return( np.amax(a, axis=0) ) def f_7(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[range_2(x)],[range_4(x)],[range_6(x)]]) return -( np.amin(a, axis=0) ) def f_8(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[ldmax_2(x)],[ldmax_4(x)],[ldmax_6(x)]]) return -( np.amin(a, axis=0) ) def f_9(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) a = np.array([[vcmax_2(x)],[vcmax_4(x)],[vcmax_6(x)]]) return -( np.amin(a, axis=0) ) def f_10(x: np.ndarray) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) cspd = (x[:,0] + x[:,9] + x[:,18]) / 3.0 ar = (x[:,1] + x[:,10] + x[:,19]) / 3.0 sweep = (x[:,2] + x[:,11] + x[:,20]) / 3.0 dprop = (x[:,3] + x[:,12] + x[:,21]) / 3.0 wingld = (x[:,4] + x[:,13] + x[:,22]) / 3.0 af = (x[:,5] + x[:,14] + x[:,23]) / 3.0 seatw = (x[:,6] + x[:,15] + x[:,24]) / 3.0 elodt = (x[:,7] + x[:,16] + x[:,25]) / 3.0 taper = (x[:,8] + x[:,17] + x[:,26]) / 3.0 return( pow( pow(x[:,0] - cspd, 2) + pow(x[:,9] - cspd, 2) + pow(x[:,18] - cspd, 2) + pow(x[:,1] - ar, 2) + pow(x[:,10] - ar, 2) + pow(x[:,19] - ar, 2) + pow(x[:,2] - sweep, 2) + pow(x[:,11] - sweep, 2) + pow(x[:,20] - sweep, 2) + pow(x[:,3] - dprop, 2) + pow(x[:,12] - dprop, 2) + pow(x[:,21] - dprop, 2) + pow(x[:,4] - wingld, 2) + pow(x[:,13] - wingld, 2) + pow(x[:,22] - wingld, 2) + pow(x[:,5] - af, 2) + pow(x[:,14] - af, 2) + pow(x[:,23] - af, 2) + pow(x[:,6] - seatw, 2) + pow(x[:,15] - seatw, 2) + pow(x[:,24] - seatw, 2) + pow(x[:,7] - elodt, 2) + pow(x[:,16] - elodt, 2) + pow(x[:,25] - elodt, 2) + pow(x[:,8] - taper, 2) + pow(x[:,17] - taper, 2) + pow(x[:,26] - taper, 2), 0.5) ) # Constraints def g_1(x: np.ndarray, _ = None) -> np.ndarray: x = np.atleast_2d(x) x = scaled_variables(x) NOISE2_CV = (noise_2(x)- 75) / 75 WEMP2_CV = (wemp_2(x) - 2200) / 2200 DOC2_CV = (doc_2(x) - 80) / 80 ROUGH2_CV = (rough_2(x) - 2) / 2 WFUEL2_CV = (wfuel_2(x) - 450) / 450 RANGE2_CV = -(range_2(x) - 2000) / 2000 NOISE4_CV = (noise_4(x) - 75) / 75 WEMP4_CV = (wemp_4(x) - 2200) / 2200 DOC4_CV = (doc_4(x) - 80) / 80 ROUGH4_CV = (rough_4(x) - 2) / 2 WFUEL4_CV = (wfuel_4(x) - 475) / 475 RANGE4_CV = -(range_4(x) - 2000) / 2000 NOISE6_CV = (noise_6(x) - 75) / 75 WEMP6_CV = (wemp_6(x) - 2200) / 2200 DOC6_CV = (doc_6(x) - 80) / 80 ROUGH6_CV = (rough_6(x) - 2) / 2 WFUEL6_CV = (wfuel_6(x) - 500) / 500 RANGE6_CV = -(range_6(x) - 2000) / 2000 NOISE2_CV = np.where(NOISE2_CV > 0, NOISE2_CV, 0) WEMP2_CV = np.where(WEMP2_CV > 0, WEMP2_CV, 0) DOC2_CV = np.where(DOC2_CV > 0, DOC2_CV, 0) ROUGH2_CV = np.where(ROUGH2_CV > 0, ROUGH2_CV, 0) WFUEL2_CV = np.where(WFUEL2_CV > 0, WFUEL2_CV, 0) RANGE2_CV = np.where(RANGE2_CV > 0, RANGE2_CV, 0) NOISE4_CV = np.where(NOISE4_CV > 0, NOISE4_CV, 0) WEMP4_CV = np.where(WEMP4_CV > 0, WEMP4_CV, 0) DOC4_CV = np.where(DOC4_CV > 0, DOC4_CV, 0) ROUGH4_CV = np.where(ROUGH4_CV > 0, ROUGH4_CV, 0) WFUEL4_CV = np.where(WFUEL4_CV > 0, WFUEL4_CV, 0) RANGE4_CV = np.where(RANGE4_CV > 0, RANGE4_CV, 0) NOISE6_CV = np.where(NOISE6_CV > 0, NOISE6_CV, 0) WEMP6_CV = np.where(WEMP6_CV > 0, WEMP6_CV, 0) DOC6_CV = np.where(DOC6_CV > 0, DOC6_CV, 0) ROUGH6_CV = np.where(ROUGH6_CV > 0, ROUGH6_CV, 0) WFUEL6_CV = np.where(WFUEL6_CV > 0, WFUEL6_CV, 0) RANGE6_CV = np.where(RANGE6_CV > 0, RANGE6_CV, 0) return -( NOISE2_CV + WEMP2_CV + DOC2_CV + ROUGH2_CV + WFUEL2_CV + RANGE2_CV + NOISE4_CV + WEMP4_CV + DOC4_CV + ROUGH4_CV + WFUEL4_CV + RANGE4_CV + NOISE6_CV + WEMP6_CV + DOC6_CV + ROUGH6_CV + WFUEL6_CV + RANGE6_CV ) objective_1 = ScalarObjective(name="", evaluator=f_1, maximize=[False]) objective_2 = ScalarObjective(name="", evaluator=f_2, maximize=[False]) objective_3 = ScalarObjective(name="", evaluator=f_3, maximize=[False]) objective_4 = ScalarObjective(name="", evaluator=f_4, maximize=[False]) objective_5 = ScalarObjective(name="", evaluator=f_5, maximize=[False]) objective_6 = ScalarObjective(name="", evaluator=f_6, maximize=[False]) objective_7 = ScalarObjective(name="", evaluator=f_7, maximize=[True]) objective_8 = ScalarObjective(name="", evaluator=f_8, maximize=[True]) objective_9 = ScalarObjective(name="", evaluator=f_9, maximize=[True]) objective_10 = ScalarObjective(name="", evaluator=f_10, maximize=[False]) objectives = [objective_1, objective_2, objective_3, objective_4, objective_5, objective_6, objective_7, objective_8, objective_9, objective_10] cons_1 = ScalarConstraint("c_1", 27, 10, g_1) constraints = [cons_1] x_1 = Variable("cruise speed 2 seats", 0.36, 0.24, 0.48) x_2 = Variable("aspect ratio 2 seats", 9, 7, 11) x_3 = Variable("sweep angle 2 seats", 3, 0, 6) x_4 = Variable("propeller diameter 2 seats", 5.7, 5.5, 5.968) x_5 = Variable("wing loading 2 seats", 22, 19, 25) x_6 = Variable("engine activity factor 2 seats", 97, 85, 110) x_7 = Variable("seat width 2 seats", 17, 14, 20) x_8 = Variable("tail length/diameter ratio 2 seats", 3.4, 3, 3.75) x_9 = Variable("taper ratio 2 seats", 0.75, 0.46, 1) x_10 = Variable("cruise speed 4 seats", 0.36, 0.24, 0.48) x_11 = Variable("aspect ratio 4 seats", 9, 7, 11) x_12 = Variable("sweep angle 4 seats", 3, 0, 6) x_13 = Variable("propeller diameter 4 seats", 5.7, 5.5, 5.968) x_14 = Variable("wing loading 4 seats", 22, 19, 25) x_15 = Variable("engine activity factor 4 seats", 97, 85, 110) x_16 = Variable("seat width 4 seats", 17, 14, 20) x_17 = Variable("tail length/diameter ratio 4 seats", 3.4, 3, 3.75) x_18 = Variable("taper ratio 4 seats", 0.75, 0.46, 1) x_19 = Variable("cruise speed 6 seats", 0.36, 0.24, 0.48) x_20 = Variable("aspect ratio 6 seats", 9, 7, 11) x_21 = Variable("sweep angle 6 seats", 3, 0, 6) x_22 = Variable("propeller diameter 6 seats", 5.7, 5.5, 5.968) x_23 = Variable("wing loading 6 seats", 22, 19, 25) x_24 = Variable("engine activity factor 6 seats", 97, 85, 110) x_25 = Variable("seat width 6 seats", 17, 14, 20) x_26 = Variable("tail length/diameter ratio 6 seats", 3.4, 3, 3.75) x_27 = Variable("taper ratio 6 seats", 0.75, 0.46, 1) variables = [x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8, x_9, x_10, x_11, x_12, x_13, x_14, x_15, x_16, x_17, x_18, x_19, x_20, x_21, x_22, x_23, x_24, x_25, x_26, x_27] problem = MOProblem(variables=variables, objectives=objectives, constraints=constraints) return problem