[petsc-users] Conditional Constraints

Shri abhyshr at mcs.anl.gov
Mon Jul 25 23:43:29 CDT 2011



----- Original Message -----
> Barry/Shri,
> 
> Is the new VI SNES type in general terms a constrained nonlinear
> solver ? 
Yes, where the constraints are on the variables.

Given a function f(x) with upper and lower bounds on x, the VI solver tries to compute an x* such that for each x_i one of the following conditions is satisfied
f(x_i) = 0 with xl_i < x_i < xu_i
f(x_i) > 0 with x_i = xl_i
f(x_i) < 0 with x_i = xu_i

In other words, given a certain constraint as a function of
> the variables of interest, does it find the optimal solution that both
> minimizes the residual and satisfy the constraint ? 

I would say that the VI solver is not an optimizer but rather a constrained nonlinear solver. 
The only constrained optimization it can do is if you provide the gradient as f(x) with 
lower/upper bounds on x.


I have been
> looking at L-BFGS constrained optimization methods and from what I
> understand, the variational inequality solver seems to fall under a
> similar but much broader category. 
I suggest you take a look at the TAO package if you are interested in optimization related problems.
http://www.mcs.anl.gov/research/projects/tao/


I would much appreciate it if you
> can point me to some papers related to the method. 

http://www.mcs.anl.gov/~tmunson/papers/semismooth.pdf

And if I
> misunderstood the domain of applicability, please do feel free to
> correct me.
> 
> Thanks,
> Vijay
> 
> On Mon, Jul 25, 2011 at 9:58 PM, Barry Smith <bsmith at mcs.anl.gov>
> wrote:
> >
> > On Jul 25, 2011, at 5:50 PM, Jonathan Backs wrote:
> >
> >> Hi Shri,
> >>
> >> Thanks for your message and all the helpful tips. If the
> >> TSVISetVariableBounds() functions are available now, I would like
> >> to try them as well. Is the interface essentially the same as with
> >> SNESVISetVariableBounds()? I will get back to you and Barry when I
> >> have had a chance to modify my application.
> >>
> >> For my problem, I believe it makes sense to have bounds on one of
> >> the variables as well as one function of the variables. The two
> >> relevant degrees of freedom are the block voltage (one for each
> >> finite difference block) and the electrode voltage (one for each
> >> electrode, which may be present in multiple blocks). The electrode
> >> voltage should keep a constant phase while the magnitude is
> >> constrained between zero and some maximum. The block voltages near
> >> the electrodes depend on the electrode voltages as well as the
> >> neighbouring block voltages. The electrode current for a given
> >> electrode is a function of its electrode voltage and several nearby
> >> block voltages, and should be constrained in magnitude between zero
> >> and some maximum (and the phase unconstrained). Would I need to use
> >> SNESVISetComputeVariableBounds since the electrode current is a
> >> function of the other variables? Would any other provisions need to
> >> be made for the block voltages, since they depend on the electrode
> >> voltages?
> >>
> >
> >   You cannot directly make a bound on some function of other
> >   variables. Instead you need to introduce another variable that is
> >   defined to be equal to that function and put the bound on that new
> >   variable.
> >
> >   Barry
> >
> >> Thank you again,
> >>
> >> Jon
> >>
> >> On 2011-07-25, at 11:58 AM, Shri wrote:
> >>
> >>>
> >>> ----- Original Message -----
> >>>> On Jul 22, 2011, at 4:16 PM, Jonathan Backs wrote:
> >>>>
> >>>>> Barry,
> >>>>>
> >>>>> Thank you so much for your response. Lucky, indeed! I look
> >>>>> forward
> >>>>> to trying out these new features.
> >>>>>
> >>>>> I neglected to mention in my original post that my electrical
> >>>>> problem is part of a DAE, which includes a time-dependent
> >>>>> heating
> >>>>> problem. Can SNESVI constraints be used in conjunction with
> >>>>> TSSetIFunction() and TSSetIJacobian() as well? (Of course, I
> >>>>> only
> >>>>> need the constraints for the time-independent electrical
> >>>>> portion.)
> >>>>
> >>>> We have not yet put that in but Shri is starting to look at that
> >>>> just
> >>>> now. Basically we would have a TSVISetVariableBounds() and handle
> >>>> everything from there. I suggest you start with a simple time
> >>>> electrical portion with constraints to explore and we'll go from
> >>>> there. Shri is actually a electrical networks guy and so can
> >>>> speak
> >>>> your language.
> >>>
> >>>
> >>>   I've added TSVISetVariableBounds() for setting the bounds on the
> >>>   variables using the TS object directly.
> >>> A few things that i want to mention here about using the
> >>> variational inequality nonlinear solver (SNESVI).
> >>> i) Use the runtime option -snes_type vi or explicitly set
> >>> SNESSetType(snes,SNESVI).
> >>> ii) There are two tested algorithms currently available, (a)
> >>> semismooth (-snes_vi_type ss) and (b) active set or reduced space
> >>> (-snes_vi_type rs).
> >>> iii) Take a look at example,ex61.c, in src/snes/examples/tutorials
> >>> which is a time-stepping nonlinear problem with constraints on the
> >>> variables. This example does not use the TS object directly but
> >>> rather a time-loop is explicitly written. Another example,ex8.c,
> >>> in src/snes/examples/tests/ is a minimum surface area problem
> >>> which uses SNESVI.
> >>>
> >>> By the way, does your problem have bounds on the variables or
> >>> bounds on some function of the variables?
> >>>
> >>> Shri
> >>>
> >>>
> >>>
> >>>>
> >>>> Barry
> >>>>
> >>>>
> >>>>
> >>>>>
> >>>>> Thank you again,
> >>>>>
> >>>>> Jon
> >>>>>
> >>>>> On 2011-07-22, at 2:46 PM, Barry Smith wrote:
> >>>>>
> >>>>>>
> >>>>>> Jon,
> >>>>>>
> >>>>>>  You may be in luck. In PETSc-dev
> >>>>>>  http://www.mcs.anl.gov/petsc/petsc-as/developers/index.html we
> >>>>>>  have now implemented variational inequality non-linear solvers
> >>>>>>  with box constraints.
> >>>>>>
> >>>>>>  That is one has a set of variables u and algebraic equations
> >>>>>>  F(u) = 0 (say of size n each) but in addition one has
> >>>>>>  constraints lu <= u <= uu where some or all of lu may be
> >>>>>>  negative infinity (no constraints) and some or all of uu may
> >>>>>>  be
> >>>>>>  infinity (no constraints). There is also a constraint on the
> >>>>>>  sign of F() for those equations associated with active
> >>>>>>  constraints. If your constraints are not in this form
> >>>>>>  sometimes
> >>>>>>  you can introduce new additional variables to get it in this
> >>>>>>  form. Read up a little on variational inequalities on the web.
> >>>>>>
> >>>>>>  To use this you provide the usual SNES function and Jacobian
> >>>>>>  but
> >>>>>>  you also provide SNESVISetVariableBounds() there is a manual
> >>>>>>  page for this function and for for SNESVI at
> >>>>>>  http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-dev/docs/index.html
> >>>>>>  (the link is broken right now but Satish is fixing it). Plus
> >>>>>>  several examples in src/snes/examples/tutorials (in
> >>>>>>  petsc-dev).
> >>>>>>
> >>>>>>  This is all new code so we would be interested in your
> >>>>>>  feedback.
> >>>>>>
> >>>>>>
> >>>>>> Barry
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On Jul 22, 2011, at 3:33 PM, Jonathan Backs wrote:
> >>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> I am trying to add a constraint feature to my first PETSc
> >>>>>>> application, which uses the finite difference method to
> >>>>>>> calculate
> >>>>>>> the potential distribution produced by a collection of
> >>>>>>> electrodes
> >>>>>>> in a resistive medium. I would like to make this simulation
> >>>>>>> more
> >>>>>>> realistic by imposing a maximum electric current and a maximum
> >>>>>>> potential difference that can be supplied to each electrode by
> >>>>>>> the
> >>>>>>> power supply. If the medium between the electrodes is very
> >>>>>>> conductive, the current maximum would be exceeded by the
> >>>>>>> maximum
> >>>>>>> potential difference, so the potential difference should be
> >>>>>>> decreased from maximum until it produces the maximum current.
> >>>>>>> On
> >>>>>>> the other hand, the potential difference between the
> >>>>>>> electrodes
> >>>>>>> should remain at maximum as long as the current remains below
> >>>>>>> maximum (say, for a less conductive medium).
> >>>>>>>
> >>>>>>> I added an extra degree of freedom (the electrode voltages) to
> >>>>>>> my
> >>>>>>> DMDA, and I developed a set of conditional expressions that
> >>>>>>> describe the above constraints, but one problem is that the
> >>>>>>> logic
> >>>>>>> relies on if-then-else decisions that are made when forming
> >>>>>>> the
> >>>>>>> function/residual and the Jacobian. Once these decisions are
> >>>>>>> made,
> >>>>>>> of course, the conditions are not checked again until the next
> >>>>>>> function or Jacobian evaluation. The non-linear solver then
> >>>>>>> tends
> >>>>>>> to oscillate between extreme solutions to the opposing
> >>>>>>> conditions
> >>>>>>> with each iteration, and never converges towards a reasonable
> >>>>>>> solution.
> >>>>>>>
> >>>>>>> Is there a better strategy for solving such problems? Does
> >>>>>>> PETSc
> >>>>>>> offer mechanisms to aid in their solution? I would very much
> >>>>>>> appreciate any hints.
> >>>>>>>
> >>>>>>> Thank you for your time,
> >>>>>>>
> >>>>>>> Jon
> >>>>>>
> >>>>>
> >>>
> >>
> >
> >


More information about the petsc-users mailing list