exponenta event banner

Минимизация энергии кусочно-линейной масс-пружинной системы с помощью конусного программирования на основе решателя

В этом примере показано, как найти равновесное положение системы масс-пружин, зависшей от двух опорных точек. Пружины обладают кусочно-линейными растягивающими силами. Система состоит из n масс в двух измерениях. Масса i соединена с пружинами i и i + 1. Пружины 1 и n + 1 также соединены с отдельными анкерными точками. В этом случае длина пружины i с нулевой силой является положительной длиной l (i), и пружина генерирует силу k (i) q при растяжении до длины q + l (i). Задача состоит в том, чтобы найти минимальную конфигурацию потенциальной энергии масс, где потенциальная энергия исходит от силы тяжести и от растяжения нелинейных пружин. Равновесие происходит при конфигурации минимальной энергии.

На этом рисунке показаны пять пружин и четыре массы, подвешенные к двум опорным точкам.

Потенциальная энергия массы m на высоте h равна mgh, где g - гравитационная постоянная на Земле. Кроме того, потенциальная энергия идеальной линейной пружины с постоянной k пружины, растянутой до длины q, составляет kq2/2. Текущая модель заключается в том, что пружина не является идеальной, но имеет ненулевую длину покоя l.

Математическая основа этого примера исходит от Лобо, Ванденберга, Бойда и Лебрета [1]. Версию этого примера, основанную на проблемах, см. в разделе Минимизация энергии кусочно-линейной системы масс-пружин с использованием конусного программирования, основанного на проблемах.

Математическая формулировка

Местоположение массы i - x (i), с горизонтальной координатой x1 (i) и вертикальной координатой x2 (i). Масса i имеет потенциальную энергию, обусловленную гравитацией gm (i) x2 (i). Потенциальная энергия в пружине i равна k (i) (d (i) -1 (i)) 2/2, где d (i) - длина пружины между массой i и массой i-1. Возьмем точку привязки 1 в качестве положения массы 0, а точку привязки 2 в качестве положения массы n + 1. Предыдущий расчет энергии показывает, что потенциальная энергия пружины i равна

Энергия (i) = k (i) (x (i) -x (i-1) ‖ -l (i)) 22.

Преобразование этой потенциальной энергетической проблемы в проблему конуса второго порядка требует введения некоторых новых переменных, как описано в Лобо [1]. Создайте переменные t (i), равные квадратному корню термина Энергия (i).

t (i) = k (i) (x (i) -x (i-1) ‖ -1 (i)) 22.

Пусть e - вектор единичного столбца [01]. Затем x2 (i) = eTx (i). Проблема становится

minx, t (∑igm (i) eTx (i) +‖t‖2      ).         (1)

Теперь рассмотрим t как переменную свободного вектора, не заданную предыдущим уравнением для t (i). Включить взаимосвязь между x (i) и t (i) в новый набор ограничений конуса

x (i) -x (i-1) -1 (i) ≤2k  ( i) t (i). (2)

Целевая функция еще не является линейной в своих переменных, как требуется для coneprog. Введите новую скалярную переменную y. Обратите внимание, что неравенство t‖2≤y эквивалентно неравенству

[2t1-y] ≤1+y   .                            (3)

Теперь проблема сводится к минимуму

minx, t, y (∑igm (i) eTx  ( i )  +  y )  ( 4 )         

с учетом ограничений конуса на x (i) и t (i), перечисленных в пункте (2), и дополнительного ограничения конуса (3). Зависимость конуса (3) обеспечивает t‖2≤y. Следовательно, проблема (4) эквивалентна проблеме (1).

Целевая функция и ограничения конуса в задаче (4) подходят для решения с coneprog.

Состав MATLAB ®

Определите шесть пружинных констант k, шесть констант длины l и пять масс м.

k = 40*(1:6);
l = [1 1/2 1 2 1 1/2];
m = [2 1 3 2 1];

Определите приблизительную гравитационную постоянную на Земле g.

g = 9.807;

Переменными для оптимизации являются десять компонентов векторов x, шесть компонентов вектора t и переменная y. Давайте v быть вектором, содержащим все эти переменные.

  • [v(1),v(2)] соответствует переменной 2-D x (1).

  • [v(3),v(4)] соответствует переменной 2-D x (2).

  • [v(5),v(6)] соответствует переменной 2-D x (3).

  • [v(7),v(8)] соответствует переменной 2-D x (4).

  • [v(9),v(10)] соответствует переменной 2-D x (5).

  • [v(11):v(16)] соответствует 6-D вектору t.

  • v(17) соответствует скалярной переменной y.

С помощью этих переменных создайте соответствующий вектор целевой функции. f.

f = zeros(size(m));
f = [f;g*m];
f = f(:);
f = [f;zeros(length(k)+1,1)];
f(end) = 1;

Создайте зависимости конуса, соответствующие пружинам между массами (2)

x (i) -x (i-1) -1 (i) ≤2k (i) t (i).

coneprog решатель использует ограничения конуса для переменного вектора v в форме

Asc⋅v-bsc‖≤dscTv-γ.

В следующем коде Asc матрица представляет член x (i) -x (i-1) ‖, сbsc = [0;0]. Конусная переменная dsc = 2/k (i) и соответствующееgamma = -l (i).

d = zeros(1,length(f));
Asc = d;
Asc([1 3]) = [1 -1];
A2 = circshift(Asc,1);
Asc = [Asc;A2];
ml = length(m);
dbase = 2*ml;
bsc = [0;0];
for i = 2:ml
    gamma = -l(i);
    dsc = d;
    dsc(dbase + i) = sqrt(2/k(i));
    conecons(i) = secondordercone(Asc,bsc,dsc,gamma);
    Asc = circshift(Asc,2,2);
end

Создайте зависимости конуса, соответствующие пружинам между конечными массами и опорными точками, используя опорные точки для расположения конечных масс, как в предыдущем коде.

x0 = [0;5];
xn = [5;4];

Asc = zeros(size(Asc));
Asc(1,(dbase-1)) = 1;
Asc(2,dbase) = 1;
bsc = xn;
gamma = -l(ml);
dsc = d;
dsc(dbase + ml) = sqrt(2/k(ml));
conecons(ml + 1) = secondordercone(Asc,bsc,dsc,gamma);

Asc = zeros(size(Asc));
Asc(1,1) = 1;
Asc(2,2) = 1;
bsc = x0;
gamma = -l(1);
dsc = d;
dsc(dbase + 1) = sqrt(2/k(1));
conecons(1) = secondordercone(Asc,bsc,dsc,gamma);

Создайте ограничение конуса (3), соответствующее переменной y

[2t1-y] ≤1+y

путем создания матрицы Asc который, при умножении на v вектор, дает вектор [2t-y]. bsc вектор соответствует константе 1 в члене 1-y. dsc вектор, при умножении на v, возвращает y. И gamma = -1.

Asc = 2*eye(length(f));
Asc(1:dbase,:) = [];
Asc(end,end) = -1;
bsc = zeros(size(Asc,1),1);
bsc(end) = -1;
dsc = d;
dsc(end) = 1;
gamma = -1;
conecons(ml+2) = secondordercone(Asc,bsc,dsc,gamma);

Наконец, создайте нижние границы, соответствующие переменным t и y.

lb = -inf(size(f));
lb(dbase+1:end) = 0;

Решение проблемы и решение графика

Постановка проблемы завершена. Решить проблему, позвонив coneprog.

[v,fval,exitflag,output] = coneprog(f,conecons,[],[],[],[],lb);
Optimal solution found.

Постройте график точек решения и анкеров.

pp = v(1:2*ml);
pp = reshape(pp,2,[]);
pp = pp';
plot(pp(:,1),pp(:,2),'ro')
hold on
xx = [x0,xn]';
plot(xx(:,1),xx(:,2),'ks')
xlim([x0(1)-0.5,xn(1)+0.5])
ylim([min(pp(:,2))-0.5,max(x0(2),xn(2))+0.5])
xxx = [x0';pp;xn'];
plot(xxx(:,1),xxx(:,2),'b--')
legend('Calculated points','Anchor points','Springs','Location',"best")
hold off

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Calculated points, Anchor points, Springs.

Можно изменить значения параметров m, l, и k чтобы увидеть, как они влияют на решение. Можно также изменить количество формообразующих элементов; код берет количество масс из предоставленных данных.

Ссылки

[1] Лобо, Мигель Соуза, Ливен Ванденберге, Стивен Бойд и Эрве Лебрет. «Приложения программирования конуса второго порядка». Линейная алгебра и ее приложения 284, № 1-3 (ноябрь 1998): 193-228. https://doi.org/10.1016/S0024-3795(98)10032-0.

См. также

|

Связанные темы