예제 #1
0
    def test_sipopt_deprecated(self):
        m = param_ex.create_model()
        m.perturbed_eta1 = Param(initialize = 4.0)
        m.perturbed_eta2 = Param(initialize = 1.0)

        output = StringIO()
        with LoggingIntercept(output, 'pyomo.contrib.sensitivity_toolbox', logging.WARNING):
            sipopt(m,[m.eta1,m.eta1],
                   [m.perturbed_eta1,m.perturbed_eta2],
                   cloneModel=False)    
        self.assertIn("DEPRECATED: The sipopt function has been deprecated. Use the "
                      "sensitivity_calculation() function with method='sipopt' to access",
                      output.getvalue().replace('\n', ' '))
예제 #2
0
    def test_bad_arg(self):
        m = ConcreteModel()
        m.t = ContinuousSet(bounds=(0, 1))

        m.a = Param(initialize=1, mutable=True)
        m.b = Param(initialize=2, mutable=True)
        m.c = Param(initialize=3, mutable=False)

        m.x = Var(m.t)

        list_one = [m.a, m.b]
        list_two = [m.a, m.b, m.c]
        list_three = [m.a, m.x]
        list_four = [m.a, m.c]

        #verify ValueError thrown when param and perturb list are different
        #  lengths
        try:
            Result = sipopt(m, list_one, list_two)
            self.fail("Expected ValueError: for different length lists")
        except ValueError:
            pass

        #verify ValueError thrown when param list has a Var in it
        try:
            Result = sipopt(m, list_three, list_two)
            self.fail(
                "Expected ValueError: variable sent through paramSubList")
        except ValueError:
            pass

        #verify ValueError thrown when perturb list has Var in it
        try:
            Result = sipopt(m, list_one, list_three)
            self.fail("Expected ValueError: variable sent through perturbList")
        except ValueError:
            pass

        #verify ValueError thrown when param list has an unmutable param
        try:
            Result = sipopt(m, list_four, list_one)
            self.fail("Expected ValueError:"
                      "unmutable param sent through paramSubList")
        except ValueError:
            pass
예제 #3
0
파일: test_sens.py 프로젝트: Pyomo/pyomo
    def test_bad_arg(self):
        m = ConcreteModel()
        m.t = ContinuousSet(bounds=(0,1))

        m.a = Param(initialize=1, mutable=True)
        m.b = Param(initialize=2, mutable=True)
        m.c = Param(initialize=3, mutable=False)

        m.x = Var(m.t)

        list_one = [m.a,m.b]
        list_two = [m.a,m.b,m.c]
        list_three = [m.a, m.x]
        list_four = [m.a,m.c]

        #verify ValueError thrown when param and perturb list are different
        #  lengths
        try:
            Result = sipopt(m,list_one,list_two)
            self.fail("Expected ValueError: for different length lists")
        except ValueError:
            pass

        #verify ValueError thrown when param list has a Var in it
        try:
            Result = sipopt(m,list_three,list_two)
            self.fail("Expected ValueError: variable sent through paramSubList")
        except ValueError:
            pass

        #verify ValueError thrown when perturb list has Var in it
        try:
            Result = sipopt(m,list_one,list_three)
            self.fail("Expected ValueError: variable sent through perturbList")
        except ValueError:
            pass

        #verify ValueError thrown when param list has an unmutable param
        try:
            Result = sipopt(m,list_four,list_one)
            self.fail("Expected ValueError:" 
                       "unmutable param sent through paramSubList")
        except ValueError:
            pass
예제 #4
0
    def test_constraintSub(self):

        m = ri.create_model()

        m.pert_a = Param(initialize=0.01)
        m.pert_b = Param(initialize=1.01)

        m_sipopt = sipopt(m, [m.a, m.b], [m.pert_a, m.pert_b])

        #verify substitutions in equality constraint
        self.assertTrue(m_sipopt.C_equal.lower.ctype is Param
                        and m_sipopt.C_equal.upper.ctype is Param)
        self.assertFalse(m_sipopt.C_equal.active)

        self.assertTrue(
            m_sipopt._sipopt_data.constList[3].lower == 0.0
            and m_sipopt._sipopt_data.constList[3].upper == 0.0 and len(
                list(
                    identify_variables(
                        m_sipopt._sipopt_data.constList[3].body))) == 2)

        #verify substitutions in one-sided bounded constraint
        self.assertTrue(m_sipopt.C_singleBnd.lower is None
                        and m_sipopt.C_singleBnd.upper.ctype is Param)
        self.assertFalse(m_sipopt.C_singleBnd.active)

        self.assertTrue(
            m_sipopt._sipopt_data.constList[4].lower is None
            and m_sipopt._sipopt_data.constList[4].upper == 0.0 and len(
                list(
                    identify_variables(
                        m_sipopt._sipopt_data.constList[4].body))) == 2)

        #verify substitutions in ranged inequality constraint
        self.assertTrue(m_sipopt.C_rangedIn.lower.ctype is Param
                        and m_sipopt.C_rangedIn.upper.ctype is Param)
        self.assertFalse(m_sipopt.C_rangedIn.active)

        self.assertTrue(
            m_sipopt._sipopt_data.constList[1].lower is None
            and m_sipopt._sipopt_data.constList[1].upper == 0.0 and len(
                list(
                    identify_variables(
                        m_sipopt._sipopt_data.constList[1].body))) == 2)

        self.assertTrue(
            m_sipopt._sipopt_data.constList[2].lower is None
            and m_sipopt._sipopt_data.constList[2].upper == 0.0 and len(
                list(
                    identify_variables(
                        m_sipopt._sipopt_data.constList[2].body))) == 2)
예제 #5
0
파일: test_sens.py 프로젝트: Pyomo/pyomo
    def test_constraintSub(self):
        
        m = ri.create_model()

        m.pert_a = Param(initialize=0.01)
        m.pert_b = Param(initialize=1.01)

        m_sipopt = sipopt(m,[m.a,m.b], [m.pert_a,m.pert_b])

        #verify substitutions in equality constraint
        self.assertTrue(m_sipopt.C_equal.lower.type() is Param and
                        m_sipopt.C_equal.upper.type() is Param)
        self.assertFalse(m_sipopt.C_equal.active)

        self.assertTrue(m_sipopt._sipopt_data.constList[3].lower == 0.0 and
                       m_sipopt._sipopt_data.constList[3].upper == 0.0 and
                       len(list(identify_variables(
                                m_sipopt._sipopt_data.constList[3].body))) == 2)

        #verify substitutions in one-sided bounded constraint
        self.assertTrue(m_sipopt.C_singleBnd.lower is None and
                        m_sipopt.C_singleBnd.upper.type() is Param)
        self.assertFalse(m_sipopt.C_singleBnd.active)

        self.assertTrue(m_sipopt._sipopt_data.constList[4].lower is None and
                        m_sipopt._sipopt_data.constList[4].upper == 0.0 and
                        len(list(identify_variables(
                                 m_sipopt._sipopt_data.constList[4].body))) == 2)
       
        #verify substitutions in ranged inequality constraint
        self.assertTrue(m_sipopt.C_rangedIn.lower.type() is Param and
                        m_sipopt.C_rangedIn.upper.type() is Param)
        self.assertFalse(m_sipopt.C_rangedIn.active)

        self.assertTrue(m_sipopt._sipopt_data.constList[1].lower is None and
                       m_sipopt._sipopt_data.constList[1].upper == 0.0 and
                       len(list(identify_variables(
                                m_sipopt._sipopt_data.constList[1].body))) == 2)

        self.assertTrue(m_sipopt._sipopt_data.constList[2].lower is None and
                       m_sipopt._sipopt_data.constList[2].upper == 0.0 and
                       len(list(identify_variables(
                                m_sipopt._sipopt_data.constList[2].body))) == 2)
예제 #6
0
파일: test_sens.py 프로젝트: Pyomo/pyomo
    def test_indexedParamsMapping(self):

        m = hiv.create_model()
        hiv.initialize_model(m,10,5,1)

        m.epsDelta = Param(initialize = 0.75001)

        q_del = {}
        q_del[(0,0)] = 1.001
        q_del[(0,1)] = 1.002
        q_del[(1,0)] = 1.003
        q_del[(1,1)] = 1.004
        q_del[(2,0)] = 0.83001
        q_del[(2,1)] = 0.83002
        q_del[(3,0)] = 0.42001
        q_del[(4,0)] = 0.17001
        m.qqDelta = Param(m.ij, initialize = q_del)

        m.aaDelta = Param(initialize =0.0001001)

        m_sipopt = sipopt(m, [m.eps,m.qq,m.aa],
                             [m.epsDelta,m.qqDelta,m.aaDelta])

        #param to var data
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[1].lower.local_name, 'eps')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[1].body.local_name, 'eps')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[1].upper.local_name, 'eps')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[6].lower.local_name, 'qq[2,0]')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[6].body.local_name, 'qq[2,0]')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[6].upper.local_name, 'qq[2,0]')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[10].lower.local_name, 'aa')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[10].body.local_name, 'aa')
        self.assertEqual(
            m_sipopt._sipopt_data.paramConst[10].upper.local_name, 'aa')
예제 #7
0
    def test_indexedParamsMapping(self):

        m = hiv.create_model()
        hiv.initialize_model(m, 10, 5, 1)

        m.epsDelta = Param(initialize=0.75001)

        q_del = {}
        q_del[(0, 0)] = 1.001
        q_del[(0, 1)] = 1.002
        q_del[(1, 0)] = 1.003
        q_del[(1, 1)] = 1.004
        q_del[(2, 0)] = 0.83001
        q_del[(2, 1)] = 0.83002
        q_del[(3, 0)] = 0.42001
        q_del[(4, 0)] = 0.17001
        m.qqDelta = Param(m.ij, initialize=q_del)

        m.aaDelta = Param(initialize=0.0001001)

        m_sipopt = sipopt(m, [m.eps, m.qq, m.aa],
                          [m.epsDelta, m.qqDelta, m.aaDelta])

        #param to var data
        self.assertEqual(m_sipopt._sipopt_data.paramConst[1].lower.local_name,
                         'eps')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[1].body.local_name,
                         'eps')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[1].upper.local_name,
                         'eps')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[6].lower.local_name,
                         'qq[2,0]')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[6].body.local_name,
                         'qq[2,0]')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[6].upper.local_name,
                         'qq[2,0]')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[10].lower.local_name,
                         'aa')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[10].body.local_name,
                         'aa')
        self.assertEqual(m_sipopt._sipopt_data.paramConst[10].upper.local_name,
                         'aa')
예제 #8
0
    def test_sipopt_equivalent(self):
        m1 = param_ex.create_model()
        m1.perturbed_eta1 = Param(initialize = 4.0)
        m1.perturbed_eta2 = Param(initialize = 1.0)

        m2 = param_ex.create_model()
        m2.perturbed_eta1 = Param(initialize = 4.0)
        m2.perturbed_eta2 = Param(initialize = 1.0)

        m11 = sipopt(m1,[m1.eta1,m1.eta2],
               [m1.perturbed_eta1,m1.perturbed_eta2],
                    cloneModel=True)        
        m22 = sensitivity_calculation('sipopt',m2,[m2.eta1,m2.eta2],
                                [m2.perturbed_eta1,m2.perturbed_eta2],
                                cloneModel=True)        
        out1 = StringIO()
        out2 = StringIO()
        m11._SENSITIVITY_TOOLBOX_DATA.constList.pprint(ostream=out1)
        m22._SENSITIVITY_TOOLBOX_DATA.constList.pprint(ostream=out2)
        self.assertMultiLineEqual(out1.getvalue(), out2.getvalue())
예제 #9
0
    
    discretizer = TransformationFactory('dae.collocation')
    discretizer.apply_to(m,nfe=n_nfe,ncp=n_ncp,scheme='LAGRANGE-RADAU')
    
    sim.initialize_model()
    


if __name__=='__main__':
    m = create_model()
    initialize_model(m,10,5,1)

    m.epsDelta = Param(initialize = 0.75001)
    
    q_del={}
    q_del[(0,0)] = 1.001
    q_del[(0,1)] = 1.002
    q_del[(1,0)] = 1.003
    q_del[(1,1)] = 1.004
    q_del[(2,0)] = 0.83001
    q_del[(2,1)] = 0.83002
    q_del[(3,0)] = 0.42001
    q_del[(4,0)] = 0.17001
    m.qqDelta = Param(m.ij, initialize=q_del)
    
    m.aaDelta = Param(initialize = .0001001)
   
    m_sipopt = sipopt(m,[m.eps,m.qq,m.aa],
                        [m.epsDelta,m.qqDelta,m.aaDelta],
                        streamSoln = True)
예제 #10
0
    plt.subplot(132)
    plt.plot(m.t.value,u,'ro',label='u')
    plt.title('Control Soln')
    plt.xlabel('time')
    
    plt.subplot(133)
    plt.plot(m.t.value,F,'ro',label='Cost Integrand')
    plt.title('Anti-derivative of \n Cost Integrand')
    plt.xlabel('time')
    
    #plt.show()
    return plt


######################################

if __name__ == '__main__':
    m = create_model()
    initialize_model(m,100)

#    plt = plot_optimal_solution(m)
#    plt.show()

    m.perturbed_a = Param(initialize=-0.25)
    m.perturbed_H = Param(initialize=0.55)
    m_sipopt = sipopt(m,[m.a,m.H],
                      [m.perturbed_a,m.perturbed_H],
                      cloneModel=True,
                      streamSoln=True)

예제 #11
0
#

from pyomo.environ import ConcreteModel, Param, Var, Constraint, inequality

from pyomo.contrib.sensitivity_toolbox.sens import sipopt


def create_model():

    m = ConcreteModel()

    m.a = Param(initialize=0, mutable=True)
    m.b = Param(initialize=1, mutable=True)

    m.x = Var(initialize=1.0)
    m.y = Var()
    m.C_rangedIn = Constraint(expr=inequality(m.a, m.x, m.b))
    m.C_equal = Constraint(expr=m.y == m.b)
    m.C_singleBnd = Constraint(expr=m.x <= m.b)

    return m


if __name__ == '__main__':
    m = create_model()

    m.pert_a = Param(initialize=0.01)
    m.pert_b = Param(initialize=1.01)

    m_sipopt = sipopt(m, [m.a, m.b], [m.pert_a, m.pert_b], streamSoln=True)
예제 #12
0
파일: parameter.py 프로젝트: Pyomo/pyomo
from pyomo.contrib.sensitivity_toolbox.sens import sipopt

def create_model():
    m = ConcreteModel()
    
    m.x1 = Var(initialize = 0.15, within=NonNegativeReals)
    m.x2 = Var(initialize = 0.15, within=NonNegativeReals)
    m.x3 = Var(initialize = 0.0, within=NonNegativeReals)
    
    m.eta1 = Param(initialize=4.5,mutable=True)
    m.eta2 = Param(initialize=1.0,mutable=True)
    
    m.const1 = Constraint(expr=6*m.x1+3*m.x2+2*m.x3-m.eta1 ==0)
    m.const2 = Constraint(expr=m.eta2*m.x1+m.x2-m.x3-1 ==0)
    m.cost = Objective(expr=m.x1**2+m.x2**2+m.x3**2)
    
    
    return m 


if __name__=='__main__':
    m = create_model()    

    m.perturbed_eta1 = Param(initialize = 4.0)
    m.perturbed_eta2 = Param(initialize = 1.0)


    m_sipopt = sipopt(m,[m.eta1,m.eta2],
                        [m.perturbed_eta1,m.perturbed_eta2],
                        streamSoln=True)
예제 #13
0
파일: test_sens.py 프로젝트: Pyomo/pyomo
    def test_clonedModel_soln(self):

        m_orig = fc.create_model()
        fc.initialize_model(m_orig,100)

        m_orig.perturbed_a = Param(initialize=-0.25)
        m_orig.perturbed_H = Param(initialize=0.55)

        m_sipopt = sipopt(m_orig,[m_orig.a,m_orig.H],
                            [m_orig.perturbed_a,m_orig.perturbed_H],
                            cloneModel=True)        
  
        #verify cloned model has _sipopt_data block
        #    and original model is untouched
        self.assertFalse(m_sipopt == m_orig)

        self.assertTrue(hasattr(m_sipopt,'_sipopt_data') and
                        m_sipopt._sipopt_data.type() is Block)

        self.assertFalse(hasattr(m_orig,'_sipopt_data'))
        self.assertFalse(hasattr(m_orig,'b'))

        #verify variable declaration
        self.assertTrue(hasattr(m_sipopt._sipopt_data,'a') and 
                        m_sipopt._sipopt_data.a.type() is Var)
        self.assertTrue(hasattr(m_sipopt._sipopt_data,'H') and 
                        m_sipopt._sipopt_data.H.type() is Var)
   
        #verify suffixes
        self.assertTrue(hasattr(m_sipopt,'sens_state_0') and
                        m_sipopt.sens_state_0.type() is Suffix and
                        m_sipopt.sens_state_0[m_sipopt._sipopt_data.H]==2 and
                        m_sipopt.sens_state_0[m_sipopt._sipopt_data.a]==1)
  
        self.assertTrue(hasattr(m_sipopt,'sens_state_1') and
                        m_sipopt.sens_state_1.type() is Suffix and
                        m_sipopt.sens_state_1[m_sipopt._sipopt_data.H]==2 and
                        m_sipopt.sens_state_1[m_sipopt._sipopt_data.a]==1)  

        self.assertTrue(hasattr(m_sipopt,'sens_state_value_1') and
                        m_sipopt.sens_state_value_1.type() is Suffix and
                        m_sipopt.sens_state_value_1[
                                        m_sipopt._sipopt_data.H]==0.55 and
                        m_sipopt.sens_state_value_1[
                                        m_sipopt._sipopt_data.a]==-0.25)
  
        self.assertTrue(hasattr(m_sipopt,'sens_init_constr') and
                        m_sipopt.sens_init_constr.type() is Suffix and
                        m_sipopt.sens_init_constr[
                                     m_sipopt._sipopt_data.paramConst[1]]==1 and
                        m_sipopt.sens_init_constr[
                                     m_sipopt._sipopt_data.paramConst[2]]==2)

        self.assertTrue(hasattr(m_sipopt,'sens_sol_state_1') and
                        m_sipopt.sens_sol_state_1.type() is Suffix)
        self.assertAlmostEqual(
                        m_sipopt.sens_sol_state_1[
                           m_sipopt.F[15]],-0.00102016765,8)

        self.assertTrue(hasattr(m_sipopt,'sens_sol_state_1_z_L') and
                        m_sipopt.sens_sol_state_1_z_L.type() is Suffix)
        self.assertAlmostEqual(
                        m_sipopt.sens_sol_state_1_z_L[
                           m_sipopt.u[15]],-2.181712e-09,13)

        self.assertTrue(hasattr(m_sipopt,'sens_sol_state_1_z_U') and
                        m_sipopt.sens_sol_state_1_z_U.type() is Suffix)
        self.assertAlmostEqual(
                        m_sipopt.sens_sol_state_1_z_U[
                           m_sipopt.u[15]],6.580899e-09,13)

        #verify deactivated constraints for cloned model
        self.assertFalse(m_sipopt.FDiffCon[0].active and
                         m_sipopt.FDiffCon[7.5].active and
                         m_sipopt.FDiffCon[15].active )

        self.assertFalse(m_sipopt.x_dot[0].active and
                         m_sipopt.x_dot[7.5].active and
                         m_sipopt.x_dot[15].active )

        #verify constraints on original model are still active
        self.assertTrue(m_orig.FDiffCon[0].active and
                        m_orig.FDiffCon[7.5].active and
                        m_orig.FDiffCon[15].active )

        self.assertTrue(m_orig.x_dot[0].active and
                        m_orig.x_dot[7.5].active and
                        m_orig.x_dot[15].active )

        #verify solution
        self.assertAlmostEqual(value(m_sipopt.J),0.0048956783,8)
예제 #14
0
def run_example(print_flag=True):
    '''
    Execute the example
    
    Arguments:
        print_flag: Toggle on/off printing
    
    Returns:
        sln_dict: Dictionary containing solution (used for automated testing)
    
    '''
    m = create_model()

    m.perturbed_eta1 = Param(initialize=4.0)
    m.perturbed_eta2 = Param(initialize=1.0)

    m_sipopt = sipopt(m, [m.eta1, m.eta2],
                      [m.perturbed_eta1, m.perturbed_eta2],
                      streamSoln=True)

    if print_flag:
        print("\nOriginal parameter values:")
        print("\teta1 =", m.eta1())
        print("\teta2 =", m.eta2())

        print("Initial point:")
        print("\tObjective =", value(m.cost))
        print("\tx1 =", m.x1())
        print("\tx2 =", m.x2())
        print("\tx3 =", m.x3())

        print("Solution with the original parameter values:")
        print("\tObjective =", m_sipopt.cost())
        print("\tx1 =", m_sipopt.x1())
        print("\tx2 =", m_sipopt.x2())
        print("\tx3 =", m_sipopt.x3())

        print("\nNew parameter values:")
        print("\teta1 =", m_sipopt.perturbed_eta1())
        print("\teta2 =", m_sipopt.perturbed_eta2())

    # This highlights one limitation of sipopt. It will only return the
    # perturbed solution. The user needs to calculate relevant values such as
    # the objective or expressions
    x1 = m_sipopt.sens_sol_state_1[m_sipopt.x1]
    x2 = m_sipopt.sens_sol_state_1[m_sipopt.x2]
    x3 = m_sipopt.sens_sol_state_1[m_sipopt.x3]
    obj = x1**2 + x2**2 + x3**2

    if print_flag:
        print("(Approximate) solution with the new parameter values:")
        print("\tObjective =", obj)
        print("\tx1 =", m_sipopt.sens_sol_state_1[m_sipopt.x1])
        print("\tx2 =", m_sipopt.sens_sol_state_1[m_sipopt.x2])
        print("\tx3 =", m_sipopt.sens_sol_state_1[m_sipopt.x3])

    # Save the results in a dictionary.
    # This is optional and makes automated testing convenient.
    # This code is not important for a Minimum Working Example (MWE) of sipopt
    d = dict()
    d['eta1'] = m.eta1()
    d['eta2'] = m.eta2()
    d['x1_init'] = m.x1()
    d['x2_init'] = m.x2()
    d['x3_init'] = m.x3()
    d['x1_sln'] = m_sipopt.x1()
    d['x2_sln'] = m_sipopt.x2()
    d['x3_sln'] = m_sipopt.x3()
    d['cost_sln'] = m_sipopt.cost()
    d['eta1_pert'] = m_sipopt.perturbed_eta1()
    d['eta2_pert'] = m_sipopt.perturbed_eta2()
    d['x1_pert'] = x1
    d['x2_pert'] = x2
    d['x3_pert'] = x3
    d['cost_pert'] = obj

    return d
예제 #15
0
    plt.xlabel('time')

    plt.subplot(132)
    plt.plot(m.t.value, u, 'ro', label='u')
    plt.title('Control Soln')
    plt.xlabel('time')

    plt.subplot(133)
    plt.plot(m.t.value, F, 'ro', label='Cost Integrand')
    plt.title('Anti-derivative of \n Cost Integrand')
    plt.xlabel('time')

    #plt.show()
    return plt


######################################

if __name__ == '__main__':
    m = create_model()
    initialize_model(m, 100)

    #    plt = plot_optimal_solution(m)
    #    plt.show()

    m.perturbed_a = Param(initialize=-0.25)
    m.perturbed_H = Param(initialize=0.55)
    m_sipopt = sipopt(m, [m.a, m.H], [m.perturbed_a, m.perturbed_H],
                      cloneModel=True,
                      streamSoln=True)
예제 #16
0
from pyomo.environ import *
from pyomo.contrib.sensitivity_toolbox.sens import sipopt


def create_model():
    m = ConcreteModel()

    m.x1 = Var(initialize=0.15, within=NonNegativeReals)
    m.x2 = Var(initialize=0.15, within=NonNegativeReals)
    m.x3 = Var(initialize=0.0, within=NonNegativeReals)

    m.eta1 = Param(initialize=4.5, mutable=True)
    m.eta2 = Param(initialize=1.0, mutable=True)

    m.const1 = Constraint(expr=6 * m.x1 + 3 * m.x2 + 2 * m.x3 - m.eta1 == 0)
    m.const2 = Constraint(expr=m.eta2 * m.x1 + m.x2 - m.x3 - 1 == 0)
    m.cost = Objective(expr=m.x1**2 + m.x2**2 + m.x3**2)

    return m


if __name__ == '__main__':
    m = create_model()

    m.perturbed_eta1 = Param(initialize=4.0)
    m.perturbed_eta2 = Param(initialize=1.0)

    m_sipopt = sipopt(m, [m.eta1, m.eta2],
                      [m.perturbed_eta1, m.perturbed_eta2],
                      streamSoln=True)
예제 #17
0
from pyomo.dae import ContinuousSet
from pyomo.contrib.sensitivity_toolbox.sens import sipopt


def create_model():

    m = ConcreteModel()

    m.a = Param(initialize=0, mutable=True)
    m.b = Param(initialize=1, mutable=True)


    m.x = Var(initialize = 1.0)        
    m.y = Var()
    m.C_rangedIn = Constraint(expr=inequality(m.a,m.x,m.b))
    m.C_equal = Constraint(expr=m.y==m.b)
    m.C_singleBnd = Constraint(expr=m.x<=m.b)


    return m

if __name__=='__main__':
    m = create_model()

    m.pert_a = Param(initialize=0.01)
    m.pert_b = Param(initialize=1.01)


    m_sipopt = sipopt(m,[m.a,m.b],[m.pert_a,m.pert_b],
                      streamSoln=True)
예제 #18
0
    def test_noClone_soln(self):

        m_orig = fc.create_model()
        fc.initialize_model(m_orig, 100)

        m_orig.perturbed_a = Param(initialize=-0.25)
        m_orig.perturbed_H = Param(initialize=0.55)

        m_sipopt = sipopt(m_orig, [m_orig.a, m_orig.H],
                          [m_orig.perturbed_a, m_orig.perturbed_H],
                          cloneModel=False)

        self.assertTrue(m_sipopt == m_orig)

        #test _sipopt_data block exists
        self.assertTrue(
            hasattr(m_orig, '_sipopt_data')
            and m_orig._sipopt_data.type() is Block)

        #test variable declaration
        self.assertTrue(
            hasattr(m_sipopt._sipopt_data, 'a')
            and m_sipopt._sipopt_data.a.type() is Var)
        self.assertTrue(
            hasattr(m_sipopt._sipopt_data, 'H')
            and m_sipopt._sipopt_data.H.type() is Var)

        #test for suffixes
        self.assertTrue(
            hasattr(m_sipopt, 'sens_state_0')
            and m_sipopt.sens_state_0.type() is Suffix
            and m_sipopt.sens_state_0[m_sipopt._sipopt_data.H] == 2
            and m_sipopt.sens_state_0[m_sipopt._sipopt_data.a] == 1)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_state_1')
            and m_sipopt.sens_state_1.type() is Suffix
            and m_sipopt.sens_state_1[m_sipopt._sipopt_data.H] == 2
            and m_sipopt.sens_state_1[m_sipopt._sipopt_data.a] == 1)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_state_value_1')
            and m_sipopt.sens_state_value_1.type() is Suffix
            and m_sipopt.sens_state_value_1[m_sipopt._sipopt_data.H] == 0.55
            and m_sipopt.sens_state_value_1[m_sipopt._sipopt_data.a] == -0.25)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_init_constr')
            and m_sipopt.sens_init_constr.type() is Suffix and
            m_sipopt.sens_init_constr[m_sipopt._sipopt_data.paramConst[1]] == 1
            and m_sipopt.sens_init_constr[m_sipopt._sipopt_data.paramConst[2]]
            == 2)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_sol_state_1')
            and m_sipopt.sens_sol_state_1.type() is Suffix)
        self.assertAlmostEqual(m_sipopt.sens_sol_state_1[m_sipopt.F[15]],
                               -0.00102016765, 8)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_sol_state_1_z_L')
            and m_sipopt.sens_sol_state_1_z_L.type() is Suffix)
        self.assertAlmostEqual(m_sipopt.sens_sol_state_1_z_L[m_sipopt.u[15]],
                               -2.181712e-09, 13)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_sol_state_1_z_U')
            and m_sipopt.sens_sol_state_1_z_U.type() is Suffix)
        self.assertAlmostEqual(m_sipopt.sens_sol_state_1_z_U[m_sipopt.u[15]],
                               6.580899e-09, 13)

        #verify deactivated constraints on model
        self.assertFalse(m_sipopt.FDiffCon[0].active
                         and m_sipopt.FDiffCon[7.5].active
                         and m_sipopt.FDiffCon[15].active)

        self.assertFalse(m_sipopt.x_dot[0].active
                         and m_sipopt.x_dot[7.5].active
                         and m_sipopt.x_dot[15].active)

        #test model solution
        self.assertAlmostEqual(value(m_sipopt.J), 0.0048956783, 8)
예제 #19
0
    def test_clonedModel_soln(self):

        m_orig = fc.create_model()
        fc.initialize_model(m_orig, 100)

        m_orig.perturbed_a = Param(initialize=-0.25)
        m_orig.perturbed_H = Param(initialize=0.55)

        m_sipopt = sipopt(m_orig, [m_orig.a, m_orig.H],
                          [m_orig.perturbed_a, m_orig.perturbed_H],
                          cloneModel=True)

        #verify cloned model has _sipopt_data block
        #    and original model is untouched
        self.assertFalse(m_sipopt == m_orig)

        self.assertTrue(
            hasattr(m_sipopt, '_sipopt_data')
            and m_sipopt._sipopt_data.ctype is Block)

        self.assertFalse(hasattr(m_orig, '_sipopt_data'))
        self.assertFalse(hasattr(m_orig, 'b'))

        #verify variable declaration
        self.assertTrue(
            hasattr(m_sipopt._sipopt_data, 'a')
            and m_sipopt._sipopt_data.a.ctype is Var)
        self.assertTrue(
            hasattr(m_sipopt._sipopt_data, 'H')
            and m_sipopt._sipopt_data.H.ctype is Var)

        #verify suffixes
        self.assertTrue(
            hasattr(m_sipopt, 'sens_state_0')
            and m_sipopt.sens_state_0.ctype is Suffix
            and m_sipopt.sens_state_0[m_sipopt._sipopt_data.H] == 2
            and m_sipopt.sens_state_0[m_sipopt._sipopt_data.a] == 1)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_state_1')
            and m_sipopt.sens_state_1.ctype is Suffix
            and m_sipopt.sens_state_1[m_sipopt._sipopt_data.H] == 2
            and m_sipopt.sens_state_1[m_sipopt._sipopt_data.a] == 1)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_state_value_1')
            and m_sipopt.sens_state_value_1.ctype is Suffix
            and m_sipopt.sens_state_value_1[m_sipopt._sipopt_data.H] == 0.55
            and m_sipopt.sens_state_value_1[m_sipopt._sipopt_data.a] == -0.25)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_init_constr')
            and m_sipopt.sens_init_constr.ctype is Suffix and
            m_sipopt.sens_init_constr[m_sipopt._sipopt_data.paramConst[1]] == 1
            and m_sipopt.sens_init_constr[m_sipopt._sipopt_data.paramConst[2]]
            == 2)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_sol_state_1')
            and m_sipopt.sens_sol_state_1.ctype is Suffix)
        self.assertAlmostEqual(m_sipopt.sens_sol_state_1[m_sipopt.F[15]],
                               -0.00102016765, 8)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_sol_state_1_z_L')
            and m_sipopt.sens_sol_state_1_z_L.ctype is Suffix)
        self.assertAlmostEqual(m_sipopt.sens_sol_state_1_z_L[m_sipopt.u[15]],
                               -2.181712e-09, 13)

        self.assertTrue(
            hasattr(m_sipopt, 'sens_sol_state_1_z_U')
            and m_sipopt.sens_sol_state_1_z_U.ctype is Suffix)
        self.assertAlmostEqual(m_sipopt.sens_sol_state_1_z_U[m_sipopt.u[15]],
                               6.580899e-09, 13)

        #verify deactivated constraints for cloned model
        self.assertFalse(m_sipopt.FDiffCon[0].active
                         and m_sipopt.FDiffCon[7.5].active
                         and m_sipopt.FDiffCon[15].active)

        self.assertFalse(m_sipopt.x_dot[0].active
                         and m_sipopt.x_dot[7.5].active
                         and m_sipopt.x_dot[15].active)

        #verify constraints on original model are still active
        self.assertTrue(m_orig.FDiffCon[0].active
                        and m_orig.FDiffCon[7.5].active
                        and m_orig.FDiffCon[15].active)

        self.assertTrue(m_orig.x_dot[0].active and m_orig.x_dot[7.5].active
                        and m_orig.x_dot[15].active)

        #verify solution
        self.assertAlmostEqual(value(m_sipopt.J), 0.0048956783, 8)
예제 #20
0
    m = create_model()
    initialize_model(m,10,5,1)

    m.epsDelta = Param(initialize = 0.75001)
    
    q_del={}
    q_del[(0,0)] = 1.001
    q_del[(0,1)] = 1.002
    q_del[(1,0)] = 1.003
    q_del[(1,1)] = 1.004
    q_del[(2,0)] = 0.83001
    q_del[(2,1)] = 0.83002
    q_del[(3,0)] = 0.42001
    q_del[(4,0)] = 0.17001
    m.qqDelta = Param(m.ij, initialize=q_del)
    
    m.aaDelta = Param(initialize = .0001001)
   
    m_sipopt = sipopt(m,[m.eps,m.qq,m.aa],
                        [m.epsDelta,m.qqDelta,m.aaDelta],
                        streamSoln = True)