Exemplo n.º 1
0
print
print ' Printing at most 5 first components of vectors'
print

print 'Initial point: ', x0[:max_n]
print 'Lower bounds on x: ', nlp.Lvar[:max_n]
print 'Upper bounds on x: ', nlp.Uvar[:max_n]
print 'f( x0 ) = ', nlp.obj( x0 )
g0 = nlp.grad( x0 )
print 'grad f( x0 ) = ', g0[:max_n]

if max_m > 0:
    print 'Initial multipliers: ', pi0[:max_m]
    print 'Lower constraint bounds: ', nlp.Lcon[:max_m]
    print 'Upper constraint bounds: ', nlp.Ucon[:max_m]
    c0 = nlp.cons( x0 )
    print 'c( x0 ) = ', c0[:max_m]

J = nlp.jac( x0 )
H = nlp.hess( x0, pi0 )
print
print ' nnzJ = ', J.nnz
print ' nnzH = ', H.nnz

print
print ' Printing at most first 5x5 principal submatrix'
print

print 'J( x0 ) = ', J[:max_m,:max_n]
print 'Hessian (lower triangle):', H[:max_n,:max_n]
Exemplo n.º 2
0
    def cons(self, x):
        """
        Evaluate the vector of general constraints for the modified problem.
        Constraints are stored in the order in which they appear in the
        original problem. If constraint i is a range constraint, c[i] will
        be the constraint that has the slack on the lower bound on c[i].
        The constraint with the slack on the upper bound on c[i] will be stored
        in position m + k, where k is the position of index i in
        rangeC, i.e., k=0 iff constraint i is the range constraint that
        appears first, k=1 iff it appears second, etc.

        Constraints appear in the following order:

        1. [ c  ]   general constraints in origninal order
        2. [ cR ]   'upper' side of range constraints
        3. [ b  ]   linear constraints corresponding to bounds on original problem
        4. [ bR ]   linear constraints corresponding to 'upper' side of two-sided
                    bounds
        """
        n = self.n
        on = self.original_n
        m = self.m
        om = self.original_m
        equalC = self.equalC
        lowerC = self.lowerC
        nlowerC = self.nlowerC
        upperC = self.upperC
        nupperC = self.nupperC
        rangeC = self.rangeC
        nrangeC = self.nrangeC

        mslow = on + self.n_con_low
        msup = mslow + self.n_con_up
        s_low = x[on:mslow]  # len(s_low) = n_con_low
        s_up = x[mslow:msup]  # len(s_up)  = n_con_up

        c = numpy.empty(m)
        c[:om] = AmplModel.cons(self, x[:on])
        c[om:om + nrangeC] = c[rangeC]

        c[equalC] -= self.Lcon[equalC]
        c[lowerC] -= self.Lcon[lowerC]
        c[lowerC] -= s_low[:nlowerC]

        c[upperC] -= self.Ucon[upperC]
        c[upperC] *= -1
        c[upperC] -= s_up[:nupperC]

        c[rangeC] -= self.Lcon[rangeC]
        c[rangeC] -= s_low[nlowerC:]

        c[om:om + nrangeC] -= self.Ucon[rangeC]
        c[om:om + nrangeC] *= -1
        c[om:om + nrangeC] -= s_up[nupperC:]

        # Add linear constraints corresponding to bounds on original problem
        lowerB = self.lowerB
        nlowerB = self.nlowerB
        Lvar = self.Lvar
        upperB = self.upperB
        nupperB = self.nupperB
        Uvar = self.Uvar
        rangeB = self.rangeB
        nrangeB = self.nrangeB

        nt = on + self.n_con_low + self.n_con_up
        ntlow = nt + self.n_var_low
        t_low = x[nt:ntlow]
        t_up = x[ntlow:]

        b = c[om + nrangeC:]

        b[:nlowerB] = x[lowerB] - Lvar[lowerB] - t_low[:nlowerB]
        b[nlowerB:nlowerB +
          nrangeB] = x[rangeB] - Lvar[rangeB] - t_low[nlowerB:]
        b[nlowerB + nrangeB:nlowerB + nrangeB +
          nupperB] = Uvar[upperB] - x[upperB] - t_up[:nupperB]
        b[nlowerB + nrangeB +
          nupperB:] = Uvar[rangeB] - x[rangeB] - t_up[nupperB:]

        return c
Exemplo n.º 3
0
print
print ' Printing at most 5 first components of vectors'
print

print 'Initial point: ', x0[:max_n]
print 'Lower bounds on x: ', nlp.Lvar[:max_n]
print 'Upper bounds on x: ', nlp.Uvar[:max_n]
print 'f( x0 ) = ', nlp.obj(x0)
g0 = nlp.grad(x0)
print 'grad f( x0 ) = ', g0[:max_n]

if max_m > 0:
    print 'Initial multipliers: ', pi0[:max_m]
    print 'Lower constraint bounds: ', nlp.Lcon[:max_m]
    print 'Upper constraint bounds: ', nlp.Ucon[:max_m]
    c0 = nlp.cons(x0)
    print 'c( x0 ) = ', c0[:max_m]

J = nlp.jac(x0)
H = nlp.hess(x0, pi0)
print
print ' nnzJ = ', J.nnz
print ' nnzH = ', H.nnz

print
print ' Printing at most first 5x5 principal submatrix'
print

print 'J( x0 ) = ', J[:max_m, :max_n]
print 'Hessian (lower triangle):', H[:max_n, :max_n]
Exemplo n.º 4
0
    def cons(self, x):
        """
        Evaluate the vector of general constraints for the modified problem.
        Constraints are stored in the order in which they appear in the
        original problem. If constraint i is a range constraint, c[i] will
        be the constraint that has the slack on the lower bound on c[i].
        The constraint with the slack on the upper bound on c[i] will be stored
        in position m + k, where k is the position of index i in
        rangeC, i.e., k=0 iff constraint i is the range constraint that
        appears first, k=1 iff it appears second, etc.

        Constraints appear in the following order:

        1. [ c  ]   general constraints in origninal order
        2. [ cR ]   'upper' side of range constraints
        3. [ b  ]   linear constraints corresponding to bounds on original problem
        4. [ bR ]   linear constraints corresponding to 'upper' side of two-sided
                    bounds
        """
        n = self.n ; on = self.original_n
        m = self.m ; om = self.original_m
        equalC = self.equalC
        lowerC = self.lowerC ; nlowerC = self.nlowerC
        upperC = self.upperC ; nupperC = self.nupperC
        rangeC = self.rangeC ; nrangeC = self.nrangeC

        mslow = on + self.n_con_low
        msup  = mslow + self.n_con_up
        s_low = x[on:mslow]    # len(s_low) = n_con_low
        s_up  = x[mslow:msup]  # len(s_up)  = n_con_up

        c = numpy.empty(m)
        c[:om] = AmplModel.cons(self, x[:on])
        c[om:om+nrangeC] = c[rangeC]

        c[equalC] -= self.Lcon[equalC]
        c[lowerC] -= self.Lcon[lowerC] ; c[lowerC] -= s_low[:nlowerC]

        c[upperC] -= self.Ucon[upperC] ; c[upperC] *= -1
        c[upperC] -= s_up[:nupperC]

        c[rangeC] -= self.Lcon[rangeC] ; c[rangeC] -= s_low[nlowerC:]

        c[om:om+nrangeC] -= self.Ucon[rangeC]
        c[om:om+nrangeC] *= -1
        c[om:om+nrangeC] -= s_up[nupperC:]

        # Add linear constraints corresponding to bounds on original problem
        lowerB = self.lowerB ; nlowerB = self.nlowerB ; Lvar = self.Lvar
        upperB = self.upperB ; nupperB = self.nupperB ; Uvar = self.Uvar
        rangeB = self.rangeB ; nrangeB = self.nrangeB

        nt = on + self.n_con_low + self.n_con_up
        ntlow = nt + self.n_var_low
        t_low = x[nt:ntlow]
        t_up  = x[ntlow:]

        b = c[om+nrangeC:]

        b[:nlowerB] = x[lowerB] - Lvar[lowerB] - t_low[:nlowerB]
        b[nlowerB:nlowerB+nrangeB] = x[rangeB] - Lvar[rangeB] - t_low[nlowerB:]
        b[nlowerB+nrangeB:nlowerB+nrangeB+nupperB] = Uvar[upperB] - x[upperB] - t_up[:nupperB]
        b[nlowerB+nrangeB+nupperB:] = Uvar[rangeB] - x[rangeB] - t_up[nupperB:]

        return c