Optimization SAS过程优化

Optimization SAS过程优化,optimization,sas,proc,sas-iml,Optimization,Sas,Proc,Sas Iml,您好,我正在尝试优化函数f,其中包含10个参数,所有10个参数的总和为零 有人能建议我如何为最后一部分编写代码,以便优化f并获得我想要的结果吗?提前感谢。文档提供了。例如,使用3 x 12矩阵 在第一行(列1:10)为参数设置任何下限约束 在第二行(列1:10)中,为参数设置任何上限约束 在第三行,把所有的都放在1:10列。在第11列中输入0表示等号。在第12列中输入0以指示约束的值 代码如下所示: proc iml; start f_prob(beta) global(one_m_on

您好,我正在尝试优化函数f,其中包含10个参数,所有10个参数的总和为零


有人能建议我如何为最后一部分编写代码,以便优化f并获得我想要的结果吗?提前感谢。

文档提供了。例如,使用3 x 12矩阵

  • 在第一行(列1:10)为参数设置任何下限约束
  • 在第二行(列1:10)中,为参数设置任何上限约束
  • 在第三行,把所有的都放在1:10列。在第11列中输入0表示等号。在第12列中输入0以指示约束的值
代码如下所示:

proc iml;  
start f_prob(beta) global(one_m_one, pone_m_one);

p = nrow(one_m_one);
td = j(p,3,0.);
a = 1;
do i = 1 to p;
    td[i,1] = exp((one_m_one[i,1])*(beta[1]) + (one_m_one[i,2])*(beta[2]) + (one_m_one[i,3])*(beta[3]) + (one_m_one[i,4])*(beta[4]) + (one_m_one[i,5])*(beta[5]) + (one_m_one[i,6])*(beta[6]) + (one_m_one[i,7])*(beta[7]) + (one_m_one[i,8])*(beta[8]) + (one_m_one[i,9])*(beta[9]) + (one_m_one[i,10])*(beta[10]));
    do j = a to 11+a;
        td[i,2] = td[i,2] + exp((pone_m_one[j,1])*(beta[1]) + (pone_m_one[j,2])*(beta[2]) + (pone_m_one[j,3])*(beta[3]) + (pone_m_one[j,4])*(beta[4]) + (pone_m_one[j,5])*(beta[5]) + (pone_m_one[j,6])*(beta[6]) + (pone_m_one[j,7])*(beta[7]) + (pone_m_one[j,8])*(beta[8]) + (pone_m_one[j,9])*(beta[9]) + (pone_m_one[j,10])*(beta[10]));
    end;
    a = a + 12;
end;
td[,3] = td[,1]/td[,2];
f = 1;
do i = 1 to p;
    f = f*td[i,3];
end;
return(f);

finish f_prob;

/* Set up the constraints: sum(x)=0 */
/*     x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 SIGN VALUE */
con = {.  .  .  .  .  .  .  .  .  .   .    .,  /* specify lower bounds */
       .  .  .  .  .  .  .  .  .  .   .    .,  /* specify upper bounds */
       1  1  1  1  1  1  1  1  1  1   0    0}; /* constraints */


beta0 = j(1,10,0);
optn = {1,4};

call nlpnra(rc, result, "f_prob", beta0, optn) blc=con;

最后一行指定矩阵表达式c*x=0的系数,其中c={11…1}包含第三行的系数

奇怪的是,在
f_prob
中,在
j
上有一个循环,但是
j
没有出现在循环中的表达式中。另外:您是否有
proc optmodel
?哎呀,我已经做了更改,将j包含在循环中。谢谢你指出这一点。Proc optmodel是否工作得更好?我已经尝试过,但我使用的是sas ue,它没有Proc optmodel。optmodel或IML是否工作得更好取决于您正在尝试做什么。通常OPTMODEL语法更接近于你在黑板上所画的语法。嗨,我对我的代码做了一些小的修改,并加入了你的建议,但我仍然有这个“错误:(执行)操作数无效”的问题。这个错误的原因可能是什么?非常感谢你的帮助。一般来说,你不应该编辑你的问题来包含答案。这使得未来的读者很难看到最初的问题并投票赞成答案。您现在遇到了另一个问题,可能是算术计算中的错误。SAS日志应显示发生错误的行号。
/* Set up the constraints: sum(x)=0 */
/*     x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 SIGN VALUE */
con = {.  .  .  .  .  .  .  .  .  .   .    .,  /* specify lower bounds */
       .  .  .  .  .  .  .  .  .  .   .    .,  /* specify upper bounds */
       1  1  1  1  1  1  1  1  1  1   0    0}; /* constraints */
call nlpnra(rc, result, "f_prob", beta, optn) blc=con;