В настоящее время я занимаюсь оптимизацией процессов лазерной резки в MATLAB. Я пытаюсь связать параметры процесса с качеством резки, например:
Входные данные (параметры процесса)
- Скорость резки
- Мощность лазера
- Вспомогательное давление газа
Выходные данные (параметры качества)
- Глубина резания
- Ширина реза
Сначала я тренирую модель нейронной сети, чтобы предсказать качество резки на основе параметров процесса.
[inputs,targets] = lasercutting_dataset;
nLayers = 2; % number of hidden layers
trainFcn = 'trainlm'; % Levenberg Marqhart training function
net = fitnet(nLayers,trainFcn);
Это отлично работает, и пока меня не интересует производительность.
Далее я хочу оптимизировать (максимизировать) скорость резания входного параметра с помощью генетического алгоритма. Это означает, что моя фитнес-функция (функция объекта) равна 1/скорость резания.
Я сделал функцию Matlab для своей фитнес-функции:
function y = fitness(x)
y = 1/x(1);
end
Затем я устанавливаю количество переменных проекта и их верхнюю и нижнюю границы:
nvars = 3; % Number of variables
LB = [130 8130 4470]; % Lower bound
UB = [175 11255 8250]; % Upper bound
Затем я определяю свое ограничение на ширину резки (я также добавлю одно ограничение на глубину).
function [c, ceq] = constraints(net,x)
outs = net(x)
c = [outs(2)+495; outs(2)-505];
% 495 <= outs
% outs <= 505
ceq = [];
end
Эта функция вызывает проблемы!
Наконец, я делаю дескрипторы для функций и запускаю оптимизацию:
[x,fval] = ga(@fitness_func,nvars,[],[],[],[],LB,UB,@(x) ConstraintFunction(net,x));
Я попытался определить входной вектор для нейронной сети (net()) внутри функции ограничений, которая не зависела от x - это сработало нормально:
dummyInput = [value; value; value];
net(dummyInput);
Я, среди прочего, получаю сообщение об ошибке, что мои ограничения функций не получают достаточно входных параметров.
Проблема, похоже, связана с передачей динамически изменяющегося «x» функции, а затем с ее прогнозированием, используя вывод для набора динамически изменяющихся ограничений.
Любые идеи относительно того, что может быть проблемой?
Я использовал ЭТО и ЭТО для вдохновения.
Любая помощь приветствуется - извините за долгий вопрос. У меня есть несколько статей по этому поводу, ни одна из которых не объясняет проблему в Matlab, а только процедуру.