[petsc-users] Conditional Constraints

Vijay S. Mahadevan vijay.m at gmail.com
Tue Jul 26 00:02:09 CDT 2011


Shri,

Would it rather be more appropriate to call it a constrained minimizer then
? I have looked at TAO before and hence my curiosity in the new solver. I
shall look at the reference you suggested before asking any more naive
questions.

Thanks,
Vijay
On Jul 25, 2011 11:43 PM, "Shri" <abhyshr at mcs.anl.gov> wrote:
>
>
> ----- 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
>> >>>>>>
>> >>>>>
>> >>>
>> >>
>> >
>> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110726/814a594f/attachment-0001.htm>


More information about the petsc-users mailing list