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>
