Giter Club home page Giter Club logo

Comments (8)

aringh avatar aringh commented on May 14, 2024

A normal way to determine termination is to look at how close one are to fulfil the optimality conditions (For example the necessary KKT conditions). For unconstrained problems, this is simply how close to 0 the gradient is.

Maybe one could do somethings similar as in #50, where the termination rule keeps track of what it needs in order to stop, and simply returns some kind of scalar value which the algorithm can use to determine if it should terminate (in an unconstrained case, think of returning the mean or the worst case component of the gradient. If this is close to 0, we stop).

from odl.

kohr-h avatar kohr-h commented on May 14, 2024

Or keep track of the step length and stop when they fall below some threshold? Or use some discrepancy principle in the case of operator equations? The possibilities seem to be quite numerous also here.

from odl.

aringh avatar aringh commented on May 14, 2024

I was talking to @adler-j about this the other day, also related to what @kohr-h wrote in #76. Maybe the most common interface for termination rules is simply to answer the question: "should I stop?", by simply returning True or Flase? In this way one could write termination rules on discrepancy principles for Landweber, or check size of the gradient for simple unconstrained optimization problems.

from odl.

kohr-h avatar kohr-h commented on May 14, 2024

Yes, absolutely. I don't think there is any discussion on what a termination rule should return. My question or suggestion was more concerned with the input side. Some unification will be helpful there.

from odl.

adler-j avatar adler-j commented on May 14, 2024

We discussed having some kind of dictionary as input, with well specified names of what things should be called. The class can then check for the things it needs, perhaps residual or current_function_value, and if they don't exist we throw an error (duck-typing style).

from odl.

kohr-h avatar kohr-h commented on May 14, 2024

I think dictionaries with standardized key names are a good and lightweight way to start. One thing we have to think about is how we specify how many of some quantity we need to store and how we update the state dictionary. For example, methods which use approximate Hessians usually need the previous and current gradients, while others may only require the current one. Storing everything is not a solution, of course, so somehow a method has to communicate with its step length and termination rules and "negotiate" the minimal amount of stored arrays.

from odl.

adler-j avatar adler-j commented on May 14, 2024

How are we doing here. Do we honestly think this will happen at some point, and wouldn't it be better to simply open a new issue if that is the case?

from odl.

kohr-h avatar kohr-h commented on May 14, 2024

I don't see anyone doing it, and it's not really high prio currently. Agree to closing and re-opening when it becomes relevant again.

from odl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.