|
Добрый день. Я приступила сегодня к самостоятельному изучению курса "Моделирование систем". Хочу понять - необходимо ли отсылать мои решения практических заданий на сайт, (и если да - то где найти волшебную кнопку "Загрузить...") или практические задания остаются полностью на моей совести? (никто не проверяет, и отчётности по ним я предоставлять не обязана?) P.S.: тьютора я не брала |
Планирование активного эксперимента при поиске оптимальных условий
Практическая часть
Рассмотрим процесс моделирования крутого восхождения (наискорейшего подъема) к экстремуму функции отклика. Для методической ясности проведения активного эксперимента зададим аналитический вид функции двух переменных
![]() |
( 10.13) |
где
— независимые переменные, факторы.
Графический образ функции двух переменных (10.13) показан на рис. 10.1.
Необходимые измерения функции отклика при движении по градиенту будем проводить по аналитическому выражению (10.13).
В каждой точке факторного пространства заданную функцию отклика (10.13) будем аппроксимировать линейной моделью — линейным уравнением регрессии вида
![]() |
( 10.14) |
где
— факторы.
Коэффициенты
в (10.14) определяются в постановке двухфакторного эксперимента.
Программный код моделирования крутого восхождения к экстремуму функции отклика может быть следующим:
function active;
clc,close all
syms x y
zz = 3*(1-x)^2*exp(-x^2 - (y+1)^2);
fprintf('\n\t Аналитический вид функции отклика:\n')
fprintf('\t f(x,y) = %s\n',char(zz))
% РАСЧЕТ ОПТИМАЛЬНЫХ КООРДИНАТ ФУНКЦИИ ОТКЛИКА
xy = fminsearch(@pan1,[0;0]);
fprintf('\t Оптимальные значения факторов:\n')
fprintf('\t x_optim = %g\n\t y_optim = %g\n',xy(1),xy(2))
y_max = abs(pan1(xy));
fprintf('\t Значение макcимума аналитической функции отклика:\n')
fprintf('\t f(x,y)_max = %g\n',y_max)
% ПОСТРОЕНИЕ ФУНКЦИИ ОТКЛИКА В ПРОСТРAНСТВЕ
[x1,x2] = meshgrid(-2:0.02:2,-2:0.02:1);
z = 3*(1-x1).^2.*exp(-x1.^2 - (x2+1).^2);
meshc(x1,x2,z);
grid on;
st='\bf\fontname{times new roman}\fontsize{12} Функция отклика';
title(st);
xlabel('\bf\fontname{times new roman}\fontsize{12} x'),
ylabel('\bf\fontname{times new roman}\fontsize{12} y'),
zlabel('\bf f(x,y)'),
zlim([0, 4])
disp('---------------------------------------------------')
fprintf('\t ПОСТАНОВКА ДВУХФАКТОРНОГО ЭКСПЕРИМЕНТА\n')
fprintf('\t Уравнение линейной модели:\n')
fprintf('\t f(x1,x2) = b0 + b1*x1 + b2*x2\n')
% ------ КРУТОЕ ВОСХОЖДЕНИЯ К ЭКСТРЕМУМУ ФУНКЦИИ ОТКЛИКА ------
fprintf('\n\t 1-й ЦИКЛ РАСЧЕТА\n')
% ОСНОВНОЙ УРОВЕНЬ ФАКТОРОВ
X10 = -0.3;
X20 = -1.5;
% РАСЧЕТ ФУНКЦИИ ОТКЛИКА В ЦЕНТРЕ НАЧАЛЬНОГО ПЛАНА
f0 = abs(pan1([X10,X20]));
% ИНТЕРВАЛЫ ВАРЬИРОВАНИЯ ФАКТОРОВ
d1 = -0.2;
d2 = -0.2;
% ЗНАЧЕНИЯ ФАКТОРОВ В ТОЧКАХ НАЧАЛЬНОГО ПЛАНА
X1up = X10 + d1;
X1dw = X10 - d1;
X2up = X20 + d2;
X2dw = X20 - d2;
% ВЫВОД СООБЩЕНИЙ
fprintf('\t Координаты центра начального плана:\n\t x10 = %g\n\t x20 = %g\n',X10,X20)
fprintf('\t Интервалы варьирования:\n\t Для 1-го фактора: %g\n\t Для 2-го фактора: %g\n', d1, d2)
fprintf('\t Значения отклика в точках начального плана:\n')
y0 = [abs(pan1([X1up,X2up])); abs(pan1([X1dw,X2up]));
abs(pan1([X1up,X2dw])); abs(pan1([X1dw,X2dw]))];
fprintf('\t\t %g\n',y0)
% ФОРМИРОВАНИЕ МАТРИЦЫ ПЛАНИРОВАНИЯ ФАКТОРОВ
fn = rot90(ff2n(2),2);
for J = 1:length(fn(:))
if (~fn(J)) %%% когда fn(J) == 0
fn(J) = -1;
else
continue;
end
end
X0 = [ones(length(fn(:,1)),1),fn];
%----------------------------------------------
fprintf('\tМатрица планирования двухфакторного эксперимента:\n')
fprintf('\t x0\t\t\tx1\t\t x2\t\t y\n')
disp([X0,y0])
%----------------------------------------------
% РАСЧЕТ КОЭФФИЦИЕНТОВ ЛИНЕЙНОЙ МОДЕЛИ
b0 = regress(y0,X0);
fprintf('\t Коэффициенты линейной модели:\n')
for J = 1:length(b0)
fprintf('\t\t b%d = %g\n',J-1,b0(J))
end
%----------------------------------------------
fprintf('\t Значения градиента:\n')
for J = 2:length(b0)
fprintf('\t g%d = %g\n',J-1,b0(J))
end
%----------------------------------------------
% ОРГАНИЗАЦИЯ ДВИЖЕНИЯ ПО ГРАДИЕНТУ
k = 0;
for J = 0.2:0.2:4
k = k + 1;
aa(k) = J;
x11 = J*b0(2);
x22 = J*b0(3);
X1(k) = X10 + x11*d1;
X2(k) = X20 + x22*d2;
f1(k) = abs(pan1([X1(k),X2(k)]));
end
%-----------------------------------------------
k1 = find(f1 == max(f1));
% КООРДИНАТЫ ЦЕНТРА НОВОГО ПЛАНА
x10 = X1(k1);
x20 = X2(k1);
%-----------------------------------------------
fprintf('\t Число шагов поиска максимума функции отклика по направлению градиента: k = %d\n',k1)
fprintf('\t Параметр шага в направлении оценки градиента: a = %g\n',aa(k1))
fprintf('\t Расчетное значение функции отклика на градиенте: y1 = %g\n',max(f1))
fprintf('\t Координаты центра нового плана:\n\t x11 = %g\n\t x21 = %g\n',X1(k1),X2(k1))
disp('-------------------------------------------------')
fprintf('\t 2-й ЦИКЛ РАСЧЕТА\n')
% КООРДИНАТЫ ФАКТОРОВ НОВОГО ПЛАНА
X11up = x10 + d1;
X11dw = x10 - d1;
X21up = x20 + d2;
X21dw = x20 - d2;
%----------------------------------------------
fprintf('\t Новые интервалы варьирования:\n\t Для 1-го фактора: %g\n\t Для 2-го фактора: %g\n', d1, d2)
fprintf('\t Значения отклика в точках нового плана:\n')
y01 = [abs(pan1([X11up,X21up])); abs(pan1([X11dw,X21up]));
abs(pan1([X11up,X21dw])); abs(pan1([X11dw,X21dw]))];
fprintf('\t\t %g\n',y01)
%----------------------------------------------
% ФОРМИРОВАНИЕ МАТРИЦЫ ПЛАНИРОВАНИЯ
fn = rot90(ff2n(2),2);
for J = 1:length(fn(:))
if (~fn(J)) %% fn(J) == 0
fn(J) = -1;
else
continue;
end
end
X0 = [ones(length(fn(:,1)),1),fn];
%----------------------------------------------
fprintf('\tМатрица планирования двухфакторного эксперимента:\n')
fprintf('\t x0\t\t\tx1\t\t x2\t\t y\n')
disp([X0,y01])
% РАСЧЕТ КОЭФФИЦИЕНТОВ ЛИНЕЙНОЙ МОДЕЛИ
b01 = regress(y01,X0);
fprintf('\t Коэффициенты линейной модели:\n')
for J = 1:length(b01)
fprintf('\t\t b%d = %g\n',J-1,b01(J))
end
%-----------------------------------------------
fprintf('\t Значения градиента:\n')
for J = 2:length(b01)
fprintf('\t g%d = %g\n',J-1,b01(J))
end
%-----------------------------------------------
% ОРГАНИЗАЦИЯ ДВИЖЕНИЯ ПО ГРАДИЕНТУ
k = 0;
for J = 0.1:0.1:4
k = k + 1;
aa(k) = J;
x11 = J*b01(2);
x22 = J*b01(3);
X11(k) = x10 + x11*d1;
X21(k) = x20 + x22*d2;
f11(k) = abs(pan1([X11(k),X21(k)]));
end
%----------------------------------------------
k1 = find(f11 == max(f11));
% КООРДИНАТЫ ЦЕНТРА НОВОГО ПЛАНА
x110 = X11(k1);
x220 = X21(k1);
%----------------------------------------------
fprintf('\t Число шагов поиска максимума функции отклика по направлению градиента: k = %d\n',k1)
fprintf('\t Параметр шага в направлении оценки градиента: a = %g\n',aa(k1))
fprintf('\t Расчетное значение функции отклика на градиенте: y2 = %g\n',max(f11))
fprintf('\t Координаты центра нового плана:\n\t x11 = %g\n\t x21 = %g\n',X11(k1),X21(k1))
disp('-------------------------------------------------')
fprintf('\t 3-й ЦИКЛ РАСЧЕТА\n')
% КООРДИНАТЫ ФАКТОРОВ НОВОГО ПЛАНА
X11up = x110 + d1;
X11dw = x110 - d1;
X21up = x220 + d2;
X21dw = x220 - d2;
%----------------------------------------------
fprintf('\t Новые интервалы варьирования:\n\t Для 1-го фактора: %g\n\t Для 2-го фактора: %g\n', d1, d2)
fprintf('\t Значения отклика в точках нового плана:\n')
y03 = [abs(pan1([X11up,X21up])); abs(pan1([X11dw,X21up]));
abs(pan1([X11up,X21dw])); abs(pan1([X11dw,X21dw]))];
fprintf('\t\t %g\n',y01)
%----------------------------------------------
% ФОРМИРОВАНИЕ МАТРИЦЫ ПЛАНИРОВАНИЯ
fn = rot90(ff2n(2),2);
for J = 1:length(fn(:))
if (~fn(J)) %% fn(J) == 0
fn(J) = -1;
else
continue;
end
end
X0 = [ones(length(fn(:,1)),1),fn];
%---------------------------------------------
fprintf('\tМатрица планирования двухфакторного эксперимента:\n')
fprintf('\t x0\t\t\tx1\t\t x2\t\t y\n')
disp([X0,y03])
%---------------------------------------------
% РАСЧЕТ КОЭФФИЦИЕНТОВ ЛИНЕЙНОЙ МОДЕЛИ
b03 = regress(y03,X0);
fprintf('\t Коэффициенты линейной модели:\n')
for J = 1:length(b03)
fprintf('\t\t b%d = %g\n',J-1,b03(J))
end
%---------------------------------------------
fprintf('\t Значения градиента:\n')
for J = 2:length(b03)
fprintf('\t g%d = %g\n',J-1,b03(J))
end
%----------------------------------------------
% ОРГАНИЗАЦИЯ ДВИЖЕНИЯ ПО ГРАДИЕНТУ
k = 0;
for J = 0.2:0.2:2
k = k + 1;
aa(k) = J;
x11 = J*b03(2);
x22 = J*b03(3);
X11(k) = x110 + x11*d1;
X21(k) = x220 + x22*d2;
f33(k) = abs(pan1([X11(k),X21(k)]));
end
%-----------------------------------------------
k3 = find(f33 == max(f33));
% КООРДИНАТЫ ЦЕНТРА НОВОГО ПЛАНА
x110 = X11(k3);
x220 = X21(k3);
%------------------------------------------------
fprintf('\t Число шагов поиска максимума функции отклика по направлению градиента: k = %d\n',k3)
fprintf('\t Параметр шага в направлении оценки градиента: a = %g\n',aa(k3))
fprintf('\t Расчетное значение функции отклика на градиенте: y3 = %g\n',max(f33))
fprintf('\t Координаты центра нового плана:\n\t x11 = %g\n\t x21 = %g\n',X11(k3),X21(k3))
disp('-------------------------------------')
fprintf('\t 4-й ЦИКЛ РАСЧЕТА\n')
% ИНТЕРВАЛЫ ВАРЬИРОВАНИЯ ФАКТОРОВ
d41 = -0.1; d42 = -0.1;
% КООРДИНАТЫ ФАКТОРОВ НОВОГО ПЛАНА
X11up = x110 + d41;
X11dw = x110 - d41;
X21up = x220 + d42;
X21dw = x220 - d42;
%-------------------------------------------
fprintf('\t Новые интервалы варьирования\n\t Для 1-го фактора: %g\n\t Для 2-го фактора: %g\n', d41, d42)
fprintf('\t Значения отклика в точках нового плана:\n')
y04 = [abs(pan1([X11up,X21up])); abs(pan1([X11dw,X21up]));
abs(pan1([X11up,X21dw])); abs(pan1([X11dw,X21dw]))];
fprintf('\t\t %g\n', y04)
% ФОРМИРОВАНИЕ МАТРИЦЫ ПЛАНИРОВАНИЯ
fn = rot90(ff2n(2), 2);
for J = 1:length(fn(:))
if (~fn(J)) %% когда fn(J) == 0
fn(J) = -1;
else
continue;
end
end
X0 = [ones(length(fn(:,1)),1), fn];
%---------------------------------------------
fprintf('\tМатрица планирования двухфакторного эксперимента:\n')
fprintf('\t x0\t\t\tx1\t\t x2\t\t y\n')
disp([X0, y04])
%----------------------------------------------
% РАСЧЕТ КОЭФФИЦИЕНТОВ ЛИНЕЙНОЙ МОДЕЛИ
b04 = regress(y04,X0);
fprintf('\t Коэффициенты линейной модели:\n')
for J = 1:length(b04)
fprintf('\t\t b%d = %g\n', J-1, b04(J))
end
fprintf('\t Значения градиента:\n')
for J = 2:length(b04)
fprintf('\t g%d = %g\n', J-1, b04(J))
end
%----------------------------------------------
% ОРГАНИЗАЦИЯ ДВИЖЕНИЯ ПО ГРАДИЕНТУ
k = 0;
for J = 5:0.5:10
k = k + 1;
aa(k) = J;
x11 = J*b04(2);
x22 = J*b04(3);
X11(k) = x110 + x11*d41;
X21(k) = x220 + x22*d42;
f44(k) = abs(pan1([X11(k), X21(k)]));
end
%-------------------------------------------------
k4 = find(f44 == max(f44));
% КООРДИНАТЫ ЦЕНТРА НОВОГО ПЛАНА
x110 = X11(k4);
x220 = X21(k4);
%-------------------------------------------------
fprintf('\t Число шагов поиска максимума функции отклика по направлению градиента: k = %d\n', k4)
fprintf('\t Параметр шага в направлении оценки градиента: a = %g\n',aa(k4))
fprintf('\t Расчетное значение функции отклика на градиенте: y4 = %g\n',max(f44))
fprintf('\t Координаты центра нового плана:\n\t x11 = %g\n\t x21 = %g\n',X11(k4),X21(k4))
disp('-----------------------------------------------')
function f = pan1(w)
%%% М-файл описания заданной функции
%%% двух переменных
x = w(1);
y = w(2);
f = 3*(1-x)^2*exp(-x^2-(y+1)^2);Результат выполнения программы
Аналитический вид функции отклика:
f(x,y) = 3*(1-x)^2*exp(-x^2-(y+1)^2)
Оптимальные значения факторов:
x_optim = -0.618038
y_optim = -0.999985
Значение макcимума аналитической функции отклика:
f(x,y)_max = 5.36057
--------------------------------------------------------------
ПОСТАНОВКА ДВУХФАКТОРНОГО ЭКСПЕРИМЕНТА
Уравнение линейной модели:
f(x1,x2) = b0 + b1*x1 + b2*x2
1-й ЦИКЛ РАСЧЕТА
Координаты центра начального плана:
x10 = -0.3
x20 = -1.5
Интервалы варьирования:
Для 1-го фактора: -0.2
Для 2-го фактора: -0.2
Значения отклика в точках начального плана:
3.22052
2.20171
4.80445
3.28456
Матрица планирования двухфакторного эксперимента:
x0 x1 x2 y
1.0000 1.0000 1.0000 3.2205
1.0000 -1.0000 1.0000 2.2017
1.0000 1.0000 -1.0000 4.8044
1.0000 -1.0000 -1.0000 3.2846
Коэффициенты линейной модели:
b0 = 3.37781
b1 = 0.634676
b2 = -0.666696
Значения градиента:
g1 = 0.634676
g2 = -0.666696
Число шагов поиска максимума функции отклика по направлению градиента: k = 15
Параметр шага в направлении оценки градиента: a = 3
Расчетное значение функции отклика на градиенте: y1 = 5.27863
Координаты центра нового плана:
x11 = -0.680805
x21 = -1.09998
---------------------------------------------------------------
2-й ЦИКЛ РАСЧЕТА
Новые интервалы варьирования:
Для 1-го фактора: -0.2
Для 2-го фактора: -0.2
Значения отклика в точках нового плана:
4.46471
4.77131
4.8365
5.16863
Матрица планирования двухфакторного эксперимента:
x0 x1 x2 y
1.0000 1.0000 1.0000 4.4647
1.0000 -1.0000 1.0000 4.7713
1.0000 1.0000 -1.0000 4.8365
1.0000 -1.0000 -1.0000 5.1686
Коэффициенты линейной модели:
b0 = 4.81029
b1 = -0.159682
b2 = -0.192275
Значения градиента:
g1 = -0.159682
g2 = -0.192275
Число шагов поиска максимума функции отклика по направлению градиента: k = 23
Параметр шага в направлении оценки градиента: a = 2.3
Расчетное значение функции отклика на градиенте: y2 = 5.35901
Координаты центра нового плана:
x11 = -0.607352
x21 = -1.01154
-----------------------------------------------------------------
3-й ЦИКЛ РАСЧЕТА
Новые интервалы варьирования:
Для 1-го фактора: -0.2
Для 2-го фактора: -0.2
Значения отклика в точках нового плана:
4.46471
4.77131
4.8365
5.16863
Матрица планирования двухфакторного эксперимента:
x0 x1 x2 y
1.0000 1.0000 1.0000 4.8831
1.0000 -1.0000 1.0000 4.8131
1.0000 1.0000 -1.0000 4.9283
1.0000 -1.0000 -1.0000 4.8578
Коэффициенты линейной модели:
b0 = 4.87058
b1 = 0.0351275
b2 = -0.0224743
Значения градиента:
g1 = 0.0351275
g2 = -0.0224743
Число шагов поиска максимума функции отклика по направлению градиента: k = 9
Параметр шага в направлении оценки градиента: a = 1.8
Расчетное значение функции отклика на градиенте: y3 = 5.36048
Координаты центра нового плана:
x11 = -0.619997
x21 = -1.00345
-----------------------------------------------------------------
4-й ЦИКЛ РАСЧЕТА
Новые интервалы варьирования:
Для 1-го фактора: -0.1
Для 2-го фактора: -0.1
Значения отклика в точках нового плана:
5.22869
5.23272
5.2359
5.23994
Матрица планирования двухфакторного эксперимента:
x0 x1 x2 y
1.0000 1.0000 1.0000 5.2287
1.0000 -1.0000 1.0000 5.2327
1.0000 1.0000 -1.0000 5.2359
1.0000 -1.0000 -1.0000 5.2399
Коэффициенты линейной модели:
b0 = 5.23431
b1 = -0.002017
b2 = -0.00360653
Значения градиента:
g1 = -0.002017
g2 = -0.00360653
Число шагов поиска максимума функции отклика по направлению градиента: k = 10
Параметр шага в направлении оценки градиента: a = 9.5
Расчетное значение функции отклика на градиенте: y4 = 5.36057
Координаты центра нового плана:
x11 = -0.618081
x21 = -1.00002
-----------------------------------------------------------------Задание
- На поверхности функции отклика вычертите линии движения к экстремуму.
- Выведите значения функции отклика в точках оптимального плана, когда в центре его достигается оценка максимума функции отклика.
- Примените функцию
(см.
) без перестановки столбцов, которая в программе выполнялпсь с помощью
. Проанализируйте полученные результаты. - Измените координаты начального плана: удалите их от оптимума, установите в непосредственной близости к экстремуму функции отклика.
- Напишите программу поиска максимума функции отклика с автоматическим выбором количества циклов, значений шага по градиенту, с заданием в диалоговых окнах
интервалов варьирования и центра начального плана.
Контрольные вопросы
- Что такое функция отклика?
- В чем различие между пассивным и активным экспериментами?
- Какие задачи решает активный эксперимент?
- Что называется градиентом функции отклика?
- В чем заключается методика поиска экстремума функции отклика?
- Почему используются линейные модели при поиске экстремума функции отклика?
- Как осуществляется построение факторного эксперимента в окрестности заданной точки факторного пространства?
- На каком этапе поиска экстремума функции отклика применяется метод наименьших квадратов?


