From 96312f6bd8f766aa98e9f026f80959baf8d42198 Mon Sep 17 00:00:00 2001 From: 1ozturkbe <1ozturkbe@gmail.com> Date: Tue, 24 Sep 2019 15:23:00 -0400 Subject: [PATCH] Comments, and testing/diffs. --- robust/robust.py | 26 +++++++++++------------ robust/testing/{ => diffs}/test_table.txt | 0 robust/testing/t_primitives.py | 16 +++++++++----- robust/testing/t_simulation.py | 4 ++-- 4 files changed, 25 insertions(+), 21 deletions(-) rename robust/testing/{ => diffs}/test_table.txt (100%) diff --git a/robust/robust.py b/robust/robust.py index 2aab606..58ddee1 100644 --- a/robust/robust.py +++ b/robust/robust.py @@ -61,7 +61,6 @@ def set(self, option_name, value): class RobustModel(object): """ RobustModel extends gpkit.Model through the robust counterpart. - It uses the nominal solution of the GP or SP to """ def __init__(self, model, type_of_uncertainty_set, **options): self.nominal_model = model @@ -69,12 +68,12 @@ def __init__(self, model, type_of_uncertainty_set, **options): self.type_of_uncertainty_set = type_of_uncertainty_set self.setting = RobustnessSetting(**options) - slopes_intercepts = LinearizeTwoTermPosynomials. \ + slopes, intercepts, _, _, _ = LinearizeTwoTermPosynomials. \ linearization_coeff(self.setting.get('minNumOfLinearSections')) self.robust_solve_properties = {'setuptime': 0, 'numoflinearsections': self.setting.get('minNumOfLinearSections'), - 'slopes': slopes_intercepts[0], - 'intercepts': slopes_intercepts[1] + 'slopes': slopes, + 'intercepts': intercepts } if 'nominalsolve' in options: @@ -97,8 +96,8 @@ def __init__(self, model, type_of_uncertainty_set, **options): self.setting.set('numberOfRegressionPoints', self.setting.get('numberOfRegressionPointsElliptical')) self.ready_gp_constraints = [] - self.to_linearize_gp_posynomials = [] - self.large_gp_posynomials = [] + self.to_linearize_gp_posynomials = [] # two-term posynomials + self.large_gp_posynomials = [] # posynomials that need to be broken up self.sp_constraints = [] self.sp_equality_constraints = [] @@ -148,14 +147,13 @@ def __init__(self, model, type_of_uncertainty_set, **options): self.number_of_gp_posynomials = len(gp_posynomials) - constraints_posynomials_tuple = self.classify_gp_constraints(gp_posynomials) - - self.ready_gp_constraints += constraints_posynomials_tuple[0] - self.to_linearize_gp_posynomials = constraints_posynomials_tuple[1] - self.large_gp_posynomials = constraints_posynomials_tuple[2] + # Classifying GP-compatible constraints. + ready_gp_constraints, self.to_linearize_gp_posynomials, \ + self.large_gp_posynomials = self.classify_gp_constraints(gp_posynomials) + self.ready_gp_constraints += ready_gp_constraints if equality_constraints: - warnings.warn('equality constraints will not be robustified') + warnings.warn('Equality constraints will not be robustified.') def setup(self, verbosity=0, **options): for option, key in options.items(): @@ -410,11 +408,11 @@ def find_number_of_piece_wise_linearization(self, two_term_data_posynomials, rea upper_model_infeasible = 0 try: sol_upper = RobustModel.internalsolve(model_upper, verbosity=0) - except RuntimeWarning: + except (RuntimeWarning, ValueError): upper_model_infeasible = 1 try: sol_lower = RobustModel.internalsolve(model_lower, verbosity=0) - except RuntimeWarning: + except (RuntimeWarning, ValueError): raise Exception("The model is infeasible") if not two_term_data_posynomials: self.robust_solve_properties['upperLowerRelError'] = 0 diff --git a/robust/testing/test_table.txt b/robust/testing/diffs/test_table.txt similarity index 100% rename from robust/testing/test_table.txt rename to robust/testing/diffs/test_table.txt diff --git a/robust/testing/t_primitives.py b/robust/testing/t_primitives.py index 54d101d..525f6f1 100644 --- a/robust/testing/t_primitives.py +++ b/robust/testing/t_primitives.py @@ -1,4 +1,5 @@ import numpy as np +import os import unittest from gpkit.tests.helpers import run_tests @@ -40,11 +41,12 @@ def test_conservativeness(self): # rm = RobustModel(m, 'elliptical') def test_methods(self): - m = simple_wing() + m = gp_test_model() nominal_solution = m.solve(verbosity=0) - methods = [{'name': 'Best Pairs', 'twoTerm': True, 'boyd': False, 'simpleModel': False}, - {'name': 'Linearized Perturbations', 'twoTerm': False, 'boyd': False, 'simpleModel': False}, - {'name': 'Simple Conservative', 'twoTerm': False, 'boyd': False, 'simpleModel': True} + methods = [{'name': 'BestPairs', 'twoTerm': True, 'boyd': False, 'simpleModel': False}, + {'name': 'LinearizedPerturbations', 'twoTerm': False, 'boyd': False, 'simpleModel': False}, + {'name': 'SimpleConservative', 'twoTerm': False, 'boyd': False, 'simpleModel': True}, + {'name': 'TwoTerm', 'twoTerm': False, 'boyd': True, 'simpleModel': False} ] uncertainty_sets = ['box', 'elliptical'] for method in methods: @@ -53,7 +55,11 @@ def test_methods(self): rm = RobustModel(m, uncertainty_set, gamma=gamma, twoTerm=method['twoTerm'], boyd=method['boyd'], simpleModel=method['simpleModel'], nominalsolve=nominal_solution) - _ = rm.robustsolve(verbosity=0) + sol = rm.robustsolve(verbosity=0) + # print os.path.dirname(__file__) + # self.assertIsNone(sol.diff(os.path.dirname(__file__) + + # 'diffs/test_methods_' + + # method['name'] + '_' + uncertainty_set)) TESTS = [TestPrimitives] diff --git a/robust/testing/t_simulation.py b/robust/testing/t_simulation.py index 917433b..da163a5 100644 --- a/robust/testing/t_simulation.py +++ b/robust/testing/t_simulation.py @@ -69,8 +69,8 @@ def test_table_diff(self): soltab = [sol, msol, bsol, esol] - origfilename = os.path.dirname(__file__) + '/' + 'test_table.txt' - filename = os.path.dirname(__file__) + '/' + 'test_table_diff.txt' + origfilename = os.path.dirname(__file__) + '/' + 'diffs/test_table.txt' + filename = os.path.dirname(__file__) + '/' + 'diffs/test_table_diff.txt' f = open(filename, 'w+') for i in ['L/D', 'A', 'Re', 'S', 'V', 't_s', 'W_w', 'W_{w_{strc}}', 'W_{w_{surf}}',