Vijay,

     VI solvers do not solve (directly anyway) an optimization problem.  For 
optimization you should use the Tao package. VI solvers solve a nonlinear 
equation coupled to inequality constraints. In our case the inequality 
constraints can only be on the independent variables (called boxed 
constraints). Essentially for each equation F_i(x) at the solution x* either 
F_i(x*) is 0 or x_i is on the constraint and F_i(x*) is of a particular sign. I 
am not the person to ask about good references on this topic, I know there are 
lots of books and papers on the topic.

   Barry



On Jul 25, 2011, at 10:17 PM, Vijay S. Mahadevan wrote:

> Barry/Shri,
> 
> Is the new VI SNES type in general terms a constrained nonlinear
> solver ? 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 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 would much appreciate it if you
> can point me to some papers related to the method. 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
>>>>>>> 
>>>>>> 
>>>> 
>>> 
>> 
>> 

Reply via email to