Source code for desdeo.problem.toy.river_pollution

from desdeo.problem.porcelain import Objective, PorcelainProblem, Variable


[docs]class RiverPollution(PorcelainProblem): """ River pollution problem by Narula and Weistroffer [NARULA1989]_. The problem has four objectives and two variables The problem describes a (hypothetical) pollution problem of a river, where a fishery and a city are polluting water. The decision variables represent the proportional amounts of biochemical oxygen demanding material removed from water in two treatment plants located after the fishery and after the city. The first and second objective functions describe the quality of water after the fishery and after the city, respectively, while objective functions three and four represent the percent return on investment at the fishery and the addition to the tax rate in the city. respectively. References ---------- .. [NARULA1989] Narula, S. & Weistroffer, H. A flexible method for nonlinear multicriteria decision-making problems Systems, IEEE Transactions on Man and Cybernetics, 1989, 19, 883-887. """ bod_fishery = Variable(0.0, 1.0, 0.5, "BOD Fishery") bod_city = Variable(0.0, 1.0, 0.5, "BOD City") @Objective("Water Quality Fishery", maximized=True) def wq_fishery(bod_fishery, bod_city): return -1.0 * (4.07 + 2.27 * bod_fishery) @Objective("Water Quality City", maximized=True) def wq_city(bod_fishery, bod_city): return ( 2.6 + 0.03 * bod_fishery + 0.02 * bod_city + 0.01 / (1.39 - bod_fishery ** 2) + 0.3 / (1.39 - bod_city ** 2) ) @Objective("Fishery ROI", maximized=True) def fishery_roi(bod_fishery, bod_city): return 8.21 - 0.71 / (1.09 - bod_fishery ** 2) @Objective("City Tax Increase", maximized=False) def city_tax(bod_fishery, bod_city): return 0.96 * (1 / (1.09 - bod_city ** 2) - 1) class Meta: name = "River pollution method"