We design pressure vessels as containers for gasses to liquids. These vessels can also maintain a pressure difference between the inside and the outside. They have many uses, from the boiler in your home to the diving cylinders. You can learn more about them in the following: There are four variables that describe a pressure vessel: shell thickness z1, head thickness z2, inner radius x3 and the length of the vessel excluding the head x4. The shell and head thicknesses can be expressed as z1 = 0.0625x1 and z2 = 0.0625x2 respectively. So, the decision vector for this problem is x = (x1, x2, x3, x4)>. Depending on the decision vector, the welding cost, material and forming of a vessel may change, when manufacturing them. The key objective in this problem is to minimise a combination of these dependent variables. The objective function can be expressed as:
Min x∈X f (x) = 1.7781z2x2 3 + 0.6224z1x3x4 + 3.1661z2 1 x4 + 19.84z2 1 x3.
The feasible space X is defined by the following constraints:
g1(x) = 0.00954x3 ≤ z2, (2)
g2(x) = 0.0193x3 ≤ z1, (3)
g3(x) = x4 ≤ 240, (4)
g4(x) = −πx2
3x4 − 4
3πx3
3 ≤ −1296000, (5)
1 ≤ x1, x2 ≤ 99 (integer variables), and (6)
10 ≤ x3, x4 ≤ 200 (continuous variables).
The best known feasible solution x∗ to the above problem has an objective function value of f (x∗) = 5.8853327736 × 103.
Now, you have the following tasks:
1. Implement all the functions f (x) and gi(x); ∀i ∈ [1, 4] independently, where each function takes at least a Numpy array x. Each function should have an independent counter that represents how many times a respective function has been called (or in other words evaluated).
2. Implement the Random Search (RS) method discussed in the lectures that can use the functions defined above and return an approximation of the optimum.
3. Implement a stochastic global optimisation algorithm of your choice (selected from the algorithms covered in the course) that can use the functions defined above and return an approximation of the optimum solution x∗.
4. For 21 repetitions of each of the algorithms implemented in 2 and 3, compare and comment on the performances of these optimisers with respect to the best known optimal function value f (x∗). The number of evaluations for each individual function f (x) or gi(x) that you are allowed at each instance of an optimisation is 4000 at most.
In this assignment, you must use Python 3.x to develop your code in a Jupyter notebook:
Please note that you are allowed to use basic and advanced Python modules, such as Numpy, Scipy, Matplotlib, etc. However, the core of the algorithmic implementations must be your own: for instance, you cannot just use a module that already implements the algorithm you selected. If you are in doubt, please feel free to contact the module coordinator for clarifications. Submission You are required to submit the following on Canvas. Code A single Jupyter notebook file (with the format XXXXXXX.ipynb1). You must ensure that all the results are pre-generated and repeatable2, otherwise you may lose marks. Documentation Within the notebook, at the top before your code, please provide answers to the following questions. The maximum word limit for your answer for each question is given at the right:
1. Which stochastic optimiser did you choose (for Task 3)?
2. Why did you choose this optimiser?
3. What constraint handling method(s) are you using and why?
The assessed learning outcomes of this assignment are as follows:
-ALO1 Demonstrate systematic understanding of fundamental concepts of optimisation problems and algorithms.
-ALO2 Propose an appropriate method to solve an optimisation problem.
-ALO3 Develop appropriate software for solving an optimisation problem.
-ALO4 Critically evaluate performance of multiple competing optimisers, and communicate analysis