【问题标题】:SAS help optimising a linear equation with restrictionsSAS 帮助优化有限制的线性方程
【发布时间】:2021-01-09 02:18:13
【问题描述】:

我希望能够解决以下类型的问题:

给定观察数据 x(1)....x(n) 和已知的固定“目标”b,求解参数 a0、a1 和 a2,使其最小化:

b-[a0+a1*x(i)+a1*x(i)^2]*x(i), i=1 to n.

限制[a0+a1*x(i)+a1*x(i)^2] 项之和等于n,即[a0+a1*x(i)+a1*x(i)^2] 的平均值等于1

我在 SAS v9.4 中尝试过 PROC MODEL 和 PROC NLIN,但没有成功。这些模块允许对单个参数进行限制,但这里不需要(a0、a1 和 a2 可以采用任何值)。也许PROC IML可以解决这种受限问题......?

感谢您的帮助!

【问题讨论】:

    标签: optimization parameters model sas linear-programming


    【解决方案1】:

    PROC OPTMODEL 是您正在寻找的。这将使您可以根据需要添加任意复杂的约束。在没有任何数据的情况下,我不完全确定这是否是您正在寻找的确切解决方案。

    %let target = 0;
    
    /* Generate data */
    data have;
        do i = 1 to 100;
            x = rand('normal');
            output;
        end;
    run;
    
    proc optmodel;
        set OBS;
        num x{OBS};
    
        read data have into OBS = [i]
            x
        ;
    
        var a0, a1;
        
        con restrict: sum {i in OBS} (a0 * a1*x[i] + a1*x[i]**2) = sum{i in OBS} 1;
    
        min objective = sum {i in OBS} (&target. - (a0 + a1*x[i] + a1*x[i]**2)*x[i]);
    
        solve;
    
        print a0 a1;
    quit;
    

    【讨论】:

    • 非常感谢 Stu - 这看起来很完美!
    • 我仍然无法让这个东西工作 data d1;do i = 1 to 100;x=ranuni(4245);w1=exp(1.0253056-3*x+0.4*x** 2);输出;结束;运行; proc 表示 data=d1 n 表示 std;var x;weight w1;run; proc optmodel;设置OBS;数量 x{OBS};将数据 d1 读入 OBS = [i] x ; var a0 初始化 1,a1 初始化 -2,a2 初始化 0.5; con 限制: sum {i in OBS} exp(a0 + a1*x[i] + a2*x[i]**2) = sum{i in OBS} 1;最小目标 = (0.2736 - sum {i in OBS} (exp(a0 + a1*x[i] + a2*x[i]**2)*x[i]))**2;用 nlp / tech=ip ms seed=21 MSMAXSTARTS=5000 msbndrange=50 解决;打印 a0 a1 a2;退出;
    • 我能够成功运行它并且解决方案收敛。你有什么问题?
    • 嗨 Stu,当我运行此代码时,它会收敛到: a0 a1 a2 4.404 -271.35 -844.7 这与用于模拟数据的实际参数相差甚远。仅供参考,我意识到我应该在原始问题中声明 b-[a0+a1*x(i)+a2*x(i)^2]*x(i)(我错误地提到了参数 'a1' 两次')。
    • 是的,我想是的。在 SAS 社区用户的帮助下,我得到了以下代码:proc optmodel;设置OBS;数量 x{OBS};将数据 d1 读入 OBS = [i] x; var a {j in 0..2}; impvar w {i in OBS} = exp(sum {j in 0..2} a[j]*x[i]^j); con r1: sum {i in OBS} w[i] = card(OBS); con r2: &target-0.001
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2012-08-13
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多