----- 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 > >>>>>> > >>>>> > >>> > >> > > > >
