ТомСим
Разработчик(и) | Томлаб Оптимизация Инк. |
---|---|
Стабильная версия | 7,8
/ 16 декабря 2011 г. |
Операционная система | ТОМЛАБ — Поддержка ОС |
Тип | Технические вычисления |
Лицензия | Собственный |
Веб-сайт | Страница продукта TomSym |
ТомСим [1] Механизм символического моделирования MATLAB — это платформа для моделирования задач прикладной оптимизации и оптимального управления.
Описание
[ редактировать ]TomSym — это полная среда моделирования в Matlab с поддержкой большинства встроенных математических операторов Matlab. Это комбинированное моделирование , компиляция и интерфейс к решателям TOMLAB . Матричная производная матричной функции представляет собой тензор четвертого ранга , то есть матрицу, каждый элемент которой является матрицей. Вместо того, чтобы использовать для этого четырехмерные матрицы, TomSym продолжает работать в двух измерениях. Это позволяет воспользоваться преимуществами очень эффективной обработки разреженных матриц в Matlab, которая недоступна для матриц более высокой размерности.
TomSym имеет множество функций, среди них:
- Способность преобразовывать выражения и генерировать аналитические производные первого и второго порядка , включая шаблоны разреженности.
- Интерфейс и совместимость с MAD , т.е. MAD можно использовать, когда символьное моделирование не подходит.
- Численное дифференцирование можно использовать для частей модели.
- Функционал для построения и расчета разнообразной информации для решения задачи.
- Поддержка операторов if, then else.
- Возможность анализа файлов Matlab в p-кодировании .
- Например, автоматическое упрощение кода для сгенерированных моделей.
- Умножение на 1 или единичная матрица исключается: 1*A = A
- Сложение / вычитание 0 исключается: 0+A = A
- Все те же матрицы сводятся к скалярам : [3;3;3]+x = 3+x
- Скаляры перемещаются влево при сложении/вычитании: Ay = -y+A
- Обратные операции отменяются: sqrt(x)^2 = x
Моделирование
[ редактировать ]Преобразование символического источника TomSym позволяет определить любой набор переменных решения (как непрерывных , так и целочисленных ) и любой тип ограничений, а также скаляры и постоянные параметры.
Линейное программирование
[ редактировать ]Пример задачи линейного программирования будет выглядеть так:
c = [-7; -5];
A = [ 1 2
4 1 ];
b_U = [ 6; 12 ];
x_L = [ 0; 0 ];
toms 2x1 x
solution = ezsolve(c'*x, {A*x<=b_U, x_L<=x});
Смешанно-целочисленное нелинейное программирование
[ редактировать ]Задача MINLP определяется так же, как задача линейного программирования. В этом примере также показано, как преобразовать модель в общую задачу TOMLAB.
Name='minlp1Demo - Kocis/Grossman.';
toms 2x1 x
toms 3x1 integer y
objective = [2 3 1.5 2 -0.5]*[x;y];
constraints = { ...
x(1) >= 0, ...
x(2) >= 1e-8, ...
x <= 1e8, ...
0 <= y <=1, ...
[1 0 1 0 0]*[x;y] <= 1.6, ...
1.333*x(2) + y(2) <= 3, ...
[-1 -1 1]*y <= 0, ...
x(1)^2+y(1) == 1.25, ...
sqrt(x(2)^3)+1.5*y(2) == 3, ...
};
guess = struct('x', ones(size(x)), 'y', ones(size(y)));
options = struct;
options.name = Name;
Prob = sym2prob('minlp', objective, constraints, guess, options);
Prob.DUNDEE.optPar(20) = 1;
Result = tomRun('minlpBB', Prob, 2);
Мультииндексное моделирование
[ редактировать ]tomSym позволяет строить модели с двумя и более переменными индексами в MATLAB. [2] В следующем примере создается переменная flow с четырьмя индексами. Затем переменная используется для создания ограничения по двум индексам и для суммирования умножения с двумерной матрицей.
% Create the indices used in model
i = tomArrayIdx('i', 1:6);
j = tomArrayIdx('j', 1:6);
k = tomArrayIdx('k', 1:6);
l = tomArrayIdx('l', 1:6);
% Create an integer variable of full length
flow = tom('flow', 6^4, 1, 'int');
% Convert the variable to a matrix with four indices.
flow = tomArray(flow,[6, 6, 6, 6]);
% Create a constraint valid for all i and j
cons = {sum(sum(flow(i, j, k, l), k), l) == 1};
% Create a scalar based on multi-index multiplications
distance = tomArray([ 0 945 605 4667 4749 4394;...
945 0 866 3726 3806 3448;...
605 866 0 4471 4541 4152;...
4667 3726 4471 0 109 415;...
4749 3806 4541 109 0 431;...
4394 3448 4152 415 431 0]);
sumtotal = sum(vec((distance(i, k) + distance(l, j)+...
distance(k, l)*.8).*flow(i, j, k, l)));
Автоматическое и числовое дифференцирование
[ редактировать ]Для функций, которые не могут быть интерпретированы TomSym, можно использовать либо автоматическое дифференцирование , либо числовое дифференцирование. В следующем примере простая задача решается с использованием двух методов.
toms x1 x2
alpha = 100;
% USE MAD (AUTOMATIC DIFFERENTIATION) FOR ONE FUNCTION
%
% Create a wrapper function. In this case we use sin, but it could be any
% MAD supported function.
y = wrap(struct('fun','sin','n',1,'sz1',1,'sz2',1,'JFuns','MAD'),x1/x2);
f = alpha*(x2-x1^2)^2 + (1-x1)^2 + y;
% Setup and solve the problem
c = -x1^2 - x2;
con = {-1000 <= c <= 0
-10 <= x1 <= 2
-10 <= x2 <= 2};
x0 = {x1 == -1.2
x2 == 1};
solution1 = ezsolve(f, con, x0);
% USE NUMERICAL DIFFERENTIATION FOR ONE FUNCTIONS
% Create a new wrapper function. In this case we use sin, but it could be
% any function since we use numerical derivatives.
y = wrap(struct('fun', 'sin', 'n', 1, 'sz1', 1, 'sz2', 1, 'JFuns', 'FDJac'), x1/ x2);
f = alpha*(x2-x1^2)^2 + (1-x1)^2 + y;
solution2 = ezsolve(f,con,x0);
Ссылки
[ редактировать ]- ^ Рутквист, Пер; М.М. Эдвалл (ноябрь 2008 г.). Руководство пользователя TOMLAB (PDF) . Пулман, Вашингтон: Tomlab Optimization Inc.
- ^ «Местоположение узла авиакомпании», домашняя страница TOMSYM , апрель 2009 г.