Skip to content

hinfsyn: very slow if stabilizing controller cannot be found #152

Description

@roryyorke

This

from control import ss, hinfsyn

# from control import tf, augw
# g = tf([1],[1,0.75])
# w1 = tf([1,1.25],[1.25,0.0125])
# p  = augw(g,w1)

p = ss([[-0.01, -0.992],
        [ 0.  ,  -0.75 ]],
       [[ 0.992,  0.   ],
        [ 0.   ,  1.   ]],
       [[ 1. , -0.8],
        [ 0. , -1. ]],
       [[ 0.8,  0. ],
        [ 1.,   0. ]])

k,n,gamma,rcond = hinfsyn(p,1,1)

takes very long to report that a stabilizing controller cannot be found (or so I assume: I gave up waiting). I changed the initial gamma in control.robust.hinfsyn from 1e100 (!!!) from 1e2, up to 1e5, and found execution time (best of 3 in each case):

gamma time [s]
1e2 0.8
1e3 0.9
1e4 2.3
1e5 15.7

If I add "job=1" to the sb10ad argument list, the run-time drops back to 0.8s for initial gamma of 1e5, and also for 1e100.

The sb10ad SLICOT SB10AD comments say "job=3", the Slycot default, is the fastest. job=1 might be bisection search (I don't understand what the SLICOT docs say; Slycot help comment claims job=1 is bisection.)

I don't know what a good initial gamma value is; an old reference of mine says 1e6 is "very large"; this is Maciejowski, published in 1989.

So, possible fixes are to change the SB10AD search type via the job parameter, or to reduce the initial gamma value.

Activity

  1. don4get commented on Jan 5, 2019

    @don4get
    Contributor

    Hello,

    As you suggest, two approaches are possible to fix this problem. I have seen that @murrayrm asked for help on this topic.

    Do you expect that changing the default job or the initial gamma will cause regressions in some cases?

  2. roryyorke commented on Jan 6, 2019

    @roryyorke
    ContributorAuthor

    I don't have the expertise to understand the implications. I don't think hinfsyn is used much, so I doubt regressions or backward compatibility are a concern.

    Matlab's hinfsyn allows one to supply a particular gamma, or a search range of gamma values https://www.mathworks.com/help/robust/ref/hinfsyn.html

    From a quick look at sb10ad I'm not sure if we can support those, but we could add an optional initial gamma value to pass to sb10ad.

  3. bnavigator commented on Jun 9, 2020

    @bnavigator
    Contributor

    The "h-infinite wait" seems to pose a problem on PowerPC: https://bugzilla.opensuse.org/show_bug.cgi?id=1172555

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions