2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 17:31 
Емкость отстойника для жидких отходов должна составлять 40 000 л. Изготовляется отстойник из железобетона толщиной 10 см. Определить геометрические параметры отстойника, при которых на его изготовление пойдет минимальное количество бетона. Учесть, что отстойник имеет крышку.

Изображение

Формулы для рассчета примерно такие:

$S = 0.1$

$A = (w/2 - \sqrt{h^2+(w/2)^2} \cdot S/h)(h-2 \cdot \sqrt{h^2+(w/2)^2} \cdot S/w)(l-2S) = 40000 $

$f=S(hw+(l-2S)(2 \cdot \sqrt{h^2+(w/2)^2} -2hS/w-wS/2h))$

$f$ -- это целевая функция, которую надо минимизировать.
$A$ -- это объем бетона, за который нельзя вылезти.
$S$ -- 10 сантиметровая стенка.

Очевидно что в данном случае это задача с нелинейными ограничениями.
Есть ли какая-нибудь библиотека под c или cpp которая бы могла это рассчитать?

Может быть существует некий волшебный способ(простой в реализации) чтобы её лианеризовать и потом использовать какое-нибудь злп?

Короче говоря как лучше это решить в данном случае? То что я смотрел(nlopt например) вроде бы использует градиенты,
информации о которых у меня вроде как нет, ещё смотрел Levenberg-Marquardt, он как я понял для реализации ограничений
для переменных вида $x_1 \in [a \ldots b]$ вместо того что требуется тут(выражение, которое зависит от переменных).

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 17:37 
Аватара пользователя
Оптимизировать один раз одну простенькую функцию? Сишечка (да и вообще любой язык программирования) здесь - это из пушки по воробьям.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 17:50 
Цитата:
>Оптимизировать один раз одну простенькую функцию? Сишечка (да и вообще любой язык программирования) здесь - это из пушки по воробьям.


Дык идея-то не моя, а нашего препода. Кстати у меня вообще складывается впечатление, что это какая-то ошибка, потому что у всех остальных задачи на уровне детсада, которые решаются за полчаса максимум, а меня эта нелинейная неведомая бурда.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 17:57 
Аватара пользователя
Отстойник в виде сферы был бы повместительней. На крайняк в виде цилиндра. Задача не является нелинейной. Форма и объём тела заданы, необходимо найти такие размеры тела, чтобы поверхность была минимальна. Тут, правда, не учтутся края, но после качественного решения можно будет уточнить задачу и решить её точно.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 18:05 
Аватара пользователя
 ! 
e7z0x1 в сообщении #906304 писал(а):
>Оптимизировать один раз одну простенькую функцию? Сишечка (да и вообще любой язык программирования) здесь - это из пушки по воробьям.
e7z0x1, цитаты оформляйте тегом quote, пользуйтесь кнопками Изображение и Изображение

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 19:08 
B@R5uk в сообщении #906310 писал(а):
Отстойник в виде сферы был бы повместительней. На крайняк в виде цилиндра. Задача не является нелинейной. Форма и объём тела заданы, необходимо найти такие размеры тела, чтобы поверхность была минимальна. Тут, правда, не учтутся края, но после качественного решения можно будет уточнить задачу и решить её точно.


А как привести её к линейной? "Благодаря" теореме Пифагора в данном случае создается сумма квадратов под корнем, которую нельзя убрать преобразованиями выражения.
Может быть есть какой-то другой способ решения? Я как бы не совсем компетентен в этом вопросе, а сдавать задачу как-то надо. Задача оптимизации нелинейной функции с нелинейным ограничением меня угнетает. К тому же в данном случае не понятно какой алгоритм лучше для решения. Может есть какой-то кодогенератор? Я смотрел матлаб, но coder не поддерживает функции для оптимизации, а достать math code у меня пока не получилось

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 19:56 
Аватара пользователя
Алгоритм решения прост: есть ограничение, из него выражаем одну из варьируемых величин и подставляем в формулу целевого значения. Затем оставшиеся величины варьируем для получения оптимального целевого значения. Поиск минимума/максимума функции одной/нескольких переменных представляет какие-либо трудности?

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 20:02 
Аватара пользователя
Пренебрегите толщиной стенок. Это крохоборство. Очевидно же, что она ничтожна в сравнении с размерами.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 20:47 
B@R5uk в сообщении #906387 писал(а):
Алгоритм решения прост: есть ограничение, из него выражаем одну из варьируемых величин и подставляем в формулу целевого значения. Затем оставшиеся величины варьируем для получения оптимального целевого значения. Поиск минимума/максимума функции одной/нескольких переменных представляет какие-либо трудности?


Эм, можете показать что вы имеете в виду?
Ограничение на объем без учета стенок вроде бы $whl/2 = 40$
Целевая функция без учета стенок $f = 2l \cdot \sqrt{h^2+(w/2)^2}+h \cdot w$

Если подставить вместо $l~ \rightarrow 80/wh$ то получается, что функция $f$ без ограничений. А как смешать ограничения объема в минимизацией площади я при таком подходе не понял.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 20:51 
Аватара пользователя
Вы сначала подставьте, а там видно будет.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 21:16 
Аватара пользователя
e7z0x1 в сообщении #906421 писал(а):
Если подставить вместо $l~ \rightarrow 80/wh$ то получается, что функция $f$ без ограничений
Ну да. Умеете находить экстремумы функции без ограничений? Там просто.
Или цель - не ответ, а демонстрация метода, причём именно этого?

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 21:31 
ИСН в сообщении #906437 писал(а):
e7z0x1 в сообщении #906421 писал(а):
Если подставить вместо $l~ \rightarrow 80/wh$ то получается, что функция $f$ без ограничений
Ну да. Умеете находить экстремумы функции без ограничений? Там просто.
Или цель - не ответ, а демонстрация метода, причём именно этого?


Экстремум найти и правда просто. Собсно я так понимаю имеется в виду взять градиент и по нему посчитать. Там прога ну 50 строк где-то, к тому же она у меня есть.

Ну подставлю я значения, тогда получается полный маразм типа того что при каких-нибудь $h = 0.001000 w = 0.101000 f = 0.080117$ то есть не надо иметь 7 пядей во лбу, чтобы понять, что чем меньше ей даешь тем больше она тому радуется, никакого намека на пресловутые 40 кубов тут нет.

Допустим это уравнение. В mathematica оно не считается. Одну переменную мы выбросили, а надо 3. При чем тут ограничения я не понял.

$h w + (160 h \sqrt{h^2 + w^2/4})/w == 0$

Выдает оно следующее
Код:
NMinimize::nnum: The function value False is not a number at {h,w} = {0.918621,0.716689}. >>


Либо я как-то не так понял вашу идею и вообще что-то не то делаю.

Цель я так думаю получить правильный ответ, каким методом дело десятое.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 21:39 
Аватара пользователя
Перепроверьте формулы.

Для поиска экстремума данной функции численные методы не нужны.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 22:00 
Аватара пользователя
e7z0x1 в сообщении #906446 писал(а):
Экстремум найти и правда просто. Собсно я так понимаю имеется в виду взять градиент и по нему посчитать.
Имеется в виду с помощью пальцев рук. Без компа. Ну, как в седой древности делали, знаете же? Производная там, уравнения, вот это всё.

 
 
 
 Re: Нелинейная оптимизация с ограничениями
Сообщение10.09.2014, 23:19 
Во-первых, в задаче указаны лишние (зависимые параметры). $W$ зависит от альфа и $H$.
Во-вторых, по-моему, проще всего применить метод Лагранжа для условного экстремума.

 
 
 [ Сообщений: 15 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group