![]() |
Как найти минимум функции при ограничениях
Как найти минимум функции вида
L=L[1]*x1+L[2]*x2+ .... +L[n]*xn----> min (max) при ограничениях: A1[1]*x1+A1[2]*x2+....+A1[n]*xn <=> B1 ..................... Am[1]*x1+Am[2]*x2+....+Am[n]*xn <=> Bm Где <=> - один из знаков: >= , = , <= |
Сначала определиться с математикой решения, затем программировать. Не совсем похоже на мат.задачу "от нечего делать".
Многокритериальное программирование, поиск минимума многокритериальной функции. Критерий Лапласа, генетическое программирование. Это где-то там. Или решить вручную 3-5 примеров, поискать общие зависимости. --- Так, бррр, стоп. Вот L1, x1, x2, xn, A1, A2, B1 - что это такое? Функции, степени, константы, параметры? В какой-нибудь более путной нотации (желательно TeXовской) можно это записать? |
Симплекс-метод -> линейное программирование -> транспортная задача -> Алгоритмы нахождения максимального потока -> Алгоритмы нахождения минимального потока -> Максимальный поток минимальной стоимости
|
Нашел реализацию симплекс метода на pascal
Код: Код:
Код: Код:
type |
Цитата:
Берешь WinMerge и сравниваешь. В оригинале : Код:
for i := 1 to m do // Вводим дополнительные переменные Код:
for i:=1 to n do У меня один вопрос: материал по приведенной ссылке читался? Задача вообще понятна, или так, кое как? |
Материал по ссылке читал несколько раз но так толком ничего не понял, задача мне понятна и решить я ее могу , правдо только графически, решить тут естественно нужно не графически, а как реализовать это программно не понятно...
Код:
for i:=1 to n do |
Цитата:
сил моих нет. Цитата:
Значит смотри, что подается на вход функции. Манипуляции с массивом остаются не понятными. Не проще будет задать пока проверочные массивами константно, а потом закомментировать после отладки? Чтобы каждый раз заново не набирать. Выкладывай проект, выкладывай проверочные задания. Кроме того в Delphi есть хорошая система отладки. Выполняй алгоритм по шагам, смотри, что ему не нравится. Цитата:
Цитата:
Понял как решать задачу - решай. Потом будешь смотреть и сравнивать с известными методами. |
Вложений: 1
Вот проэкт
|
Вот сама задача :
При подкормке посевов необходимо внести на 1га почвы не менее 6 единиц химического вещества А, не менее 37 единиц химического вещества В, не менее 26 единиц химического вещества С и не менее 4 единиц химического вещества D. Фермер закупает комбинированные удобрения четырех видов В1, В2, В3 и В4. В таблице указано содержание количества единиц химического вещества в 10 кг каждого вида удобрений и цена 1 кг удобрений. Определите потребность фермера в удобрениях В1, В2, В3 и В4 на 1 га посевной площади при минимальных затратах на их приобретение. Химические вещества Содержание химических веществ в 10 кг удобрения В1 В2 В3 В4 А 32 14 27 20 В 11 5 9 2 С 6 5 13 7 D 4 3 7 5 Цена1кг 24 17 30 12 |
Jenek56Rus, каков акцент: просто решить задачу или же решить задачу на Delphi?
|
Решить задачу в делфи...!
|
Цитата:
---- Открыл программу. И куда там что писать? Можно в какое-нибудь соответствие привести коэф. ограничений, коэф. функций и т.д. ? Помни, это ты проблемой занимаешься, я ее первый раз вижу. |
32 14 27 20 коэфиценты 1 ограничения
11 5 9 2 коэфиценты 2 ограничения 6 5 13 7 коэфиценты 3 ограничения 4 3 7 5 коэфиценты 4 ограничения 24 17 30 12 это коэфиценты функции но так как это 1 кг а коэфиценты ограничений в 10кг умножим их на 10 6 единиц химического вещества А, не менее 37 единиц химического вещества В, не менее 26 единиц химического вещества С и не менее 4 единиц химического вещества D. Ну а это правая часть ограничений. Верный ответ данной программы 881,798, в проекте картинка там есть верный результат... |
Вложений: 1
Jenek56Rus, не реально, чтобы кто-либо продавал удобрения в десятимиллионных долях грамма ;). Я лично добавил ограничение целочисленности, дабы фермеру не пришлось ходить за удобрениями с атомными весами: Файл 82263 (NB: это документ Microsoft Excel, не код на Delphi!).
|
Скачаный файл по ссылке открыть не могу, при извлечении из архива пишет поврежден...
Для меня все же главным вопросом остается как реализовать это все программно... |
Jenek56Rus, я пробовал разобраться в твоей программе. Сейчас я остыл, но придушить очень хотелось.
Первый раз, когда пытался понять, что куда записывать, чтобы запустить расчет, второй раз за недокументированный алгоритм. Если с первым разобрался, то на второе просто плюнул. "Идея" алгоритма мне не ясна. Соотв. вложенные циклы тоже мало о чем говорят. В слепую разбираться что они делают и что они должны(!) делать - никакого желания. Вон посмотри у Iska. Каждое значение выводится через формулу. Все красиво и понятно. Зачем массив A сделан 100 на 100? Его как отлаживать? 5x5 10х10, край 15х15 хватит за глаза. Дважды щелкни на форму, откроется FormCreate процедура. В ней напиши n:=4, m:=4, StringGrid1 тому то, stringGrid2 - тому то. Что бы при запуске программы УЖЕ были забиты тестовые данные. Я тебе это уже раз третий говорю. Нажимать кнопку "сформировать матрицы" каждый раз в начале работы мне надоело после второго раза. Наведи порядок на форме. Все нормальные люди читают сверху-вниз, слева-направо. А кнопка формирования матриц где-то в середине формы. Если бы не экран с расчетами Iska, я бы вообще не запустил эту программу. Потому что я не понимаю, что писать, куда писать, и почему ей(программе) это не нравится. Почему заполняя левую верхнюю таблицу, программа ругается на какую-то нижнюю правую. Это раздражает. Ладно, к сути. Алгоритм SOLVE ясен? Можно его прокомментировать? Чтобы проверяющий (в данном случае я) понимал, что должен выполнить цикл. Лучше всего формулу с текстом. Если текст сложно, то только формулу. До solve программа у меня доходит, дальше я не осилил. Жду прокомментированный алгоритм до завтра. Завтра мы работаем до часу, посмотрю еще. |
Цитата:
|
Цитата:
|
Алгоритм SOLVE мне не совсем ясен ... Совсем запутался с задачей...(
|
Можете математически обьяснить как это решить...?
|
Цитата:
Смотри формулы в примере Iska. Цитата:
|
Не пойму откуда берутся эти значения которые выделены
|
Jenek56Rus, из «ниоткуда». Это и есть искомые величины, подбирая которые, надстройка Microsoft Excel «Поиск решения», ищет оптимальное (в данном случае — минимальное) значение целевой функции (здесь — «Сумма закупки»). Изначально мы волевым решением вводим начальный базисный план — присваиваем этим ячейкам нулевые значения. Затем, в результате решения задачи оптимизации в этих ячейках последовательно меняются значения, вплоть до нахождения минимума целевой функции и, соответственно, оптимального плана.
NB: в приложенном документе Microsoft Excel нет исходного кода алгоритма решения — симплекс-метода — как такового. Алгоритм «зашит» в уже бинарном виде в качестве одного из используемых методов «внутри» самой надстройки «Поиск решения». Не ищите исходный код алгоритма ни там, ни там. Я выложил документ только для того, чтобы показать в схематическом виде, как выглядит постановка задачи. |
Iska, предупреждать надо :)
|
lxa85, я думал — народ в курсе :(.
Чую, что автору, надо искать нечто такое: Линейное программирование Задача о смесях Алгоритм на Delphi - Поиск в Google. Сам я Delphi пробовал один раз, когда она была версии 3, и решил, что это — не моё, потому толку в конкретном решении от меня будет ноль. |
Iska, сия Ёксельская надстройка (поиск решения) работает на удивление эффективно. И там, кстати, не только симплекс-метод, насколько я понимаю. Приводимые Мелкомягкими (в справке) ссылки на труды основоположников меня не убедили. Не знаете ли Вы более внятного описания конкретной реализации алгоритма? Понятно: чтобы нагло содрать. Ибо реально работает.
|
Цитата:
Цитата:
Может быть стоит попробовать поискать бесплатные библиотеки, реализующие подобный функционал, прежде всего — фортрановские. Вот, навскидку нашёл обзорную статью: Использование пакетов прикладных программ для решения оптимизационных задач. |
Вложений: 1
Создал новый проэкт но не знаю как его проверить, и еще вопрос как туда добавить ограничения и переменные...?
|
Вложений: 1
Дома проверять нечем. Почитал записку, прикладываю прокомментированный вариант.
Моя текущая оценка - нормальный рабочий черновик. На защиту пока не тянет. |
lxa85, ну как у нас обстоят дела с проверкой...?
|
Никак. Занимался оформлением бумаг и другими насущными проблемами.
|
Время: 15:44. |
Время: 15:44.
© OSzone.net 2001-