Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка системы нерав-в на непротиворечивость, перед запуском алгоритма их обработки. 
:(
    Опции темы
Lios
Дата 13.4.2005, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.3.2005
Где: Питер

Репутация: нет
Всего: нет



Народы!!! Заранее благодарствую : )
А теперь к делу...

Задачу описывать не буду -- я знаю, как её решать, единственная загвоздка -- это проверить множество, заданное линейными неравенствами (неравенств больше переменных) на непустоту. Т.е. неравенства -- на непротиворечивость. Можно ли это сделать, если да -- то опишите, пожалуйста, вкратце суть (меня клинит -- вообще никаких мыслей нет... вернее есть, но мне каэтся, что это бред. Опишу ниже : ).
Программирую в Дельфи, но это неважно ("обязательно" указала ; ) -- главное суть, а запрограммирую сама.

Теперь обещанный бред... Пожалуй, приведу пример:
пусть переменных две, а неравенств три.

х1 + х2 <= 7,
x1 >= 5,
x2 >= 5,
все переменные положительны (здесь это и так ясно, а в общем сл. это требование должно выполняться дополнительно к заданным неравенствам).

Множество, задаваемое этими неравенствами пусто (нерав-ва противоречивы).
Но если неравенств больше сотни (переменных 10), то противоречия не видны невооружённым глазом. Внутренний голос мне подсказывает (и я почему-то уверена, что он нагло врёт), что надо добавить одну переменную (здесь. Чтобы уравнять число (не)равенств и переменных) и превратить т.о. одно из неравенств в равенство, например, первое:

х1 + х2 + x3 = 7,
x1 >= 5,
x2 >= 5,
(все переменные остаются положительными).

И затем решить одним из известных методов систему уравнений, заменив в остальных неравенствах знак >= (или <=) на просто =. (Вот здесь-то вся загвоздка -- насколько правомерна такая замена???). Если решение есть и все компоненты его положительны, значит, неравенства непротиворечивы и множество непусто. И наоборот.

Ещё была мысля попробовать найти (или хотя бы оценить) объём множества, задаваемого неравенствами, т.е. если объём этого мн-ва заведомо больше положительного числа, то мн-во непусто. Но как это сделать (если вообще можно) -- кто его знает...

Вот...

P.S. Не горит, но в течение недели-двух (максимум) хотелось бы в этом разобраться.

P.P.S. Да, кста! Если это важно: обработка неравенств -- это решение задачи линейного программирования на заданном этими неравенствами мн-ве симплекс-методом. Может быть, я чего-то недопонимаю и в процессе обработки выяснится, что мн-во пусто??? Во всех книжках, которые я видела, симплекс-метод описан для "непустого мн-ва". А у меня могут быть противоречия. Как их опознать в процессе работы алгоритма??
PM MAIL ICQ   Вверх
maxim1000
Дата 13.4.2005, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 24
Всего: 110



по поводу симплекс-метода ничего не скажу, а что касается неравенств...
решение системы неравенств (если непустое) - многоугольник или нечто многоугольное, уходящее в бесконечность
так что можно попробовать научиться работать с такими объектами (как с набором граней или еще как-нибудь)
а основная операция - отсечение от многоугольника куска одной прямой (или пересечение вообще)
правда, могут возникнуть проблемы с обобщением на бОльшие размерности, но попробовать можно...

второй способ: (используя описанный здесь же подход)
превращаем каждое неравенство в равенство вводя кучу переменных (все они неотрицательны)
получим что-то вроде прямой в 3-мерном пространстве, только размерности будут другие
тоже может что-то получиться...

вот...больше в голову ничего не приходит...пока...

Это сообщение отредактировал(а) maxim1000 - 13.4.2005, 01:22


--------------------
qqq
PM WWW   Вверх
maxim1000
Дата 13.4.2005, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 24
Всего: 110



а...это ж просто
если система разрешима, симплекс-метод даст ответ
если нет, то есть два варианта:
1. при выполнении возникнет ошибка - отловить, я думаю, трудности не представит
2. выдаст бредовый результат - его можно просто подставить в систему и проверить
Добавлено @ 01:28
Цитата
Как их опознать в процессе работы алгоритма??

скорее всего, достаточно отловить простые ошибки (типа деления на ноль), а отлов остальных возложить на проверку результата...
P.S. вот только если метод зависает на плохих системах, вот тогда плохо будет...


--------------------
qqq
PM WWW   Вверх
Lios
Дата 14.4.2005, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.3.2005
Где: Питер

Репутация: нет
Всего: нет



maxim1000
Цитата
1. при выполнении возникнет ошибка - отловить

В том то и беда, что я не знаю, как противоречивые неравенства отразятся на ходе алгоритма! Ежели бы я знала, какую ошибку ждать, то при её возникновении выдала бы пользователю что-нть типа "Данные противоречивы, задача неразрешима, проверьте... и т.д. и т.п." и всё...

Цитата
выдаст бредовый результат - его можно просто подставить в систему

Боюсь, что симплекс-метод (СМ) результата не выдаст в сл. противоречий, а либо зациклится (вообще число итераций неизвестно), либо выдаст ошибку типа "прогр. выполнила недопустимую операцию..."
Здесь важно проверить на непротиворечивость до запуска СМ...
Либо в процессе (кто-нибудь знает, как это происходит в СМ?), но этого я пока не умею.

Пожалуй, запущу СМ без предварительной проверки, а затем задам заведомо противоречивые данные... И посмотрю, как поведёт себя программа. Да и пошагово отследить можно, хвала аллаху, вернее, создателям Дельфи : )

Но предложения и пожелания принимаются всё равно!!! : )
Ишшо раз всем спасибо! : )
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.