SAS Proc IML: минимизация функции по отношению к одной переменной

#sas #minimization #sas-iml

#sas #минимизация #sas-iml

Вопрос:

Используя SAS proc IML, у меня есть функция: CVF(m,p,h,pi,e);

Я хотел бы угадать h, который минимизирует эту функцию. Существует ли какая-либо встроенная подпрограмма для ее минимизации? Или как я могу построить для нее итеративный процесс? Все остальные переменные определены.

Комментарии:

1. Как упоминалось ниже, вы можете использовать NLPQN или NLPNRA. Независимо от того, какую процедуру оптимизации вы выберете, вам придется предоставить первоначальное предположение для решения. Если у вас еще нет приблизительного предположения, вы можете оценить целевую функцию на однородной сетке, как описано в этой статье : blogs.sas.com/content/iml/2014/06/11 /…

Ответ №1:

Используйте call nlpqn(); . Передаваемая вами функция должна иметь только 1 параметр, вектор, который вы хотите оптимизировать. Итак, здесь я определяю квадратичную функцию, в которой также могут быть определены параметры a, b и c. Используйте ГЛОБАЛЬНЫЙ оператор и определите неподвижные переменные перед вызовом.

В качестве альтернативы, вы можете поместить все во входной вектор, а затем добавить ограничения, чтобы эти значения не перемещались.

 proc iml;

start myfun(x) global(a, b, c);
    out = a*x**2   b*x   c;
    return (out);
finish myfun;

a = 1;
b = 2;
c = 4;

optn = {0, /* option 1: 0 -> MIN, 1 -> MAX*/
        0  /* Print options 0-5 0 least, 5 most*/
        };

init = 0;
call nlpqn(rc, res, "myfun", init);

/*rc > 0 means success*/
print rc res;
quit;
  

ВОЗВРАТ:

                                   The SAS System           08:59 Friday, June 27, 2014   3

                                      rc       res

                                       3        -1
  

Комментарии:

1. Как я мог ограничить диапазон решений? в данном конкретном случае я хотел бы ограничить x> 0.

2. Посмотрите документацию. Вы создаете матрицу ограничений и передаете ее функции nlpqn() .

3. Вот подробная информация о матрице линейных ограничений. support.sas.com/documentation/cdl/en/imlug/66845/HTML/default /…

Ответ №2:

Конечно, вы можете создать свою собственную процедуру оптимизации на языке IML, но у вас также есть встроенные процедуры оптимизации, см. Главу 11 Руководства пользователя IML, Примеры нелинейной оптимизации.