Menu

Custom objective function

Ali Naderi
2022-07-30
2022-08-15
  • Ali Naderi

    Ali Naderi - 2022-07-30

    Hi everyone,
    I would like to just put the fist step of input prediction (u(0)) in the cost function. However I don't know is it possible to do it in simulink?

     
  • Andreas Völz

    Andreas Völz - 2022-08-15

    Dear Ali Naderi,

    if I understand you correctly, you want to penalize only u(0) in the integral cost function and not u(t) for t in [0, Thor]. This is possible by adding if-statements in lfct, dldx, dldu, for example

    void lfct(typeRNum *out, ctypeRNum t, ctypeRNum *x, ctypeRNum *u, ctypeRNum *p, ctypeRNum *xdes, ctypeRNum *udes, typeUSERPARAM *userparam)
    {
        ctypeRNum* param = (ctypeRNum*)userparam;
    
        out[0] = (param[0] * POW2(x[0] - xdes[0])
                + param[1] * POW2(x[1] - xdes[1]) / 2;
         if(t == 0) {
                out[0] += param[2] * POW2(u[0] - udes[0])) / 2;
          }
    }
    
    void dldu(typeRNum *out, ctypeRNum t, ctypeRNum *x, ctypeRNum *u, ctypeRNum *p, ctypeRNum *xdes, ctypeRNum *udes, typeUSERPARAM *userparam)
    {
        ctypeRNum* param = (ctypeRNum*)userparam;
    
        out[0] = (t == 0) ? param[2] * (u[0] - udes[0]) : 0;
    }
    

    Best regards,
    Andreas Völz

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.