Exemplo n.º 1
0
 def _turn_max_to_relu(self):
     new_constraints = []
     for c in self.constraints:
         if isinstance(c, MaxConstraint):
             # varnew1 - varin1 + varin2 = 0
             # varnew2 = relu(varnew1)
             # varout - varnew2 - varin2 = 0
             var1in = c.var1in
             var2in = c.var2in
             varout = c.varout
             varnew1 = getNewVariable("max2relu")
             varnew2 = getNewVariable("max2relu")
             cnew1 = Constraint("EQUALITY")
             cnew1.monomials = [
                 Monomial(1.0, varnew1),
                 Monomial(-1.0, var1in),
                 Monomial(1.0, var2in)
             ]
             cnew2 = ReluConstraint(varin=varnew1, varout=varnew2)
             cnew3 = Constraint("EQUALITY")
             cnew3.monomials = [
                 Monomial(1.0, varout),
                 Monomial(-1.0, var2in),
                 Monomial(-1.0, varnew2)
             ]
             new_constraints.extend([cnew1, cnew2, cnew3])
         else:
             new_constraints.append(c)
     self.constraints = new_constraints
Exemplo n.º 2
0
    def read_relu_equations(self):
        for i in range(self.n_relu):
            var_in = self.f['/relu/varin%d' % (i + 1)][()][0]
            var_out = self.f['/relu/varout%d' % (i + 1)][()][0]

            if var_out not in self.var_dict.keys():
                self.var_dict[var_out] = getNewVariable('xd')
            if var_in not in self.var_dict.keys():
                self.var_dict[var_in] = getNewVariable('xd')

            self.relu_list.append(
                ReluConstraint(varin=self.var_dict[var_in],
                               varout=self.var_dict[var_out]))
Exemplo n.º 3
0
 def read_input_output_control_vars(self):
     for v in self.f['vars/states'][()]:
         if v not in self.var_dict:
             self.var_dict[v] = getNewVariable('xd')
         self.state_vars.append(self.var_dict[v])
     for v in self.f['vars/controls'][()]:
         if v not in self.var_dict:
             self.var_dict[v] = getNewVariable('xd')
         self.control_vars.append(self.var_dict[v])
     for v in self.f['vars/outputs'][()]:
         if v not in self.var_dict:
             self.var_dict[v] = getNewVariable('xd')
         self.output_vars.append(self.var_dict[v])
Exemplo n.º 4
0
    def read_max_equations(self):  # these are all relu equations
        for i in range(self.n_max):
            vars_in = self.f['/max/varsin%d' % (i + 1)][()]
            var_out = self.f['/max/varout%d' % (i + 1)][()][0]
            var_in1 = vars_in[0]
            var_in2 = vars_in[1]

            if var_out not in self.var_dict.keys():
                self.var_dict[var_out] = getNewVariable('xd')
            if var_in1 not in self.var_dict.keys():
                self.var_dict[var_in1] = getNewVariable('xd')
            if var_in2 not in self.var_dict.keys():
                self.var_dict[var_in2] = getNewVariable('xd')

            self.max_list.append(
                MaxConstraint(
                    varsin=[self.var_dict[var_in1], self.var_dict[var_in2]],
                    varout=self.var_dict[var_out]))
Exemplo n.º 5
0
    def read_equations(self):
        for i in range(self.n_eq):
            vars = self.f['/eq/vars%d' % (i + 1)][()]
            for v in vars:
                if v not in self.var_dict.keys():
                    self.var_dict[v] = getNewVariable('xd')

            coeffs = self.f['/eq/coeffs%d' % (i + 1)][()].astype(np.float)
            b = self.f['/eq/scalar%d' % (i + 1)][()].astype(np.float)[0]
            monomial_list = [
                Monomial(c, self.var_dict[v]) for (c, v) in zip(coeffs, vars)
            ]
            self.eq_list.append(
                Constraint(ConstraintType('EQUALITY'), monomial_list, b))
Exemplo n.º 6
0
    def read_inequalities(self):
        for i in range(self.n_ineq):
            left_var = self.f['/ineq/varleft%d' % (i + 1)][()][0]
            rite_var = self.f['/ineq/varright%d' % (i + 1)][()][0]
            for v in [left_var, rite_var]:
                if v not in self.var_dict.keys():
                    self.var_dict[v] = getNewVariable('xd')

            # add lvar <= rvar
            monomial_list = [
                Monomial(1, self.var_dict[left_var]),
                Monomial(-1, self.var_dict[rite_var])
            ]
            self.ineq_list.append(
                Constraint(ConstraintType('LESS_EQ'), monomial_list, 0))