roboforum.ru

Технический форум по робототехнике.
Текущее время: 19 апр 2025, 02:29

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 91 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 13:58 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Улучшит - вполне возможно. Но в общем случае такие операции не гарантируют нахождение оптимального решения. Оптимальное может быть найдено только если перед тем как применять эти операции матрица B будет содержать ровно столько единиц, сколько их в оптимальном решении.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 14:14 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
А разве число единиц в матрице B не всегдаа будет равно n?
Грубо коворя, располагаем единицы в B по второй диагонали (для четного n)
и перставляем...
Только вот в общем случае сложность все равно дикая, а оптимальность... не уверен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 14:20 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
blindman писал(а):
Улучшит - вполне возможно. Но в общем случае такие операции не гарантируют нахождение оптимального решения. Оптимальное может быть найдено только если перед тем как применять эти операции матрица B будет содержать ровно столько единиц, сколько их в оптимальном решении.

Ну я писал про исходную задачу.

Добавлено спустя 58 секунд:
Переставляем - это решение "в лоб", сложность n!

Его можно так же "в лоб" оптимизировать, сделав оценку сначала жадным алгоритмом и потом применив метод ветвей и границ.

Добавлено спустя 1 минуту 56 секунд:
Но сложность всё равно останется NP

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 14:20 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Типа, находим пару, у которой a(x1y1)+a(x2y2)-a(x1y2)-a(x2y1) минимально
и переставляем, проверив условие про главную диагональ.
поиск пропорционален n2... Скорость схождения не могу оценить.
Или нет?


Последний раз редактировалось Michael_K 25 дек 2009, 15:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 14:22 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Michael_K писал(а):
А разве число единиц в матрице B не всегдаа будет равно n?

Нет, не всегда. Я уточнил условие - не "ровно 1 единичный элемент в каждой строке/столбце", а "как минимум 1"

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 14:31 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2Michael_K: Да, именно это. Скорость схождения пока тоже не берусь оценивать, но всё равно Андрей уже поменял уже условия задачи :)

Добавлено спустя 5 минут 30 секунд:
Я думаю можно в текущей формулировке попробовать дин-прог применить и чуть обобщив задачу.

Убрать только надо моим методом условие про главную диагональ (поставив в неё в матрице А числа равные сумме 1 и всех положительных значений исходной матрицы А).

И попытаться перейти от матрицы A'[n, i] к матрице A''[n,i+1], где i от 1 до n-1.

Добавлено спустя 20 секунд:
Считая что А' уже решено, а A'' ща построим.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 14:37 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Может так: расставляем единицы так, чтобы было по одной в каждой строке и колонке. Потом меняем матрицу с помощью 3 операций:

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

Разумеется, операция может быть выполнена только если в ее результате не нарушатся условия задачи, и операция улучшит решение. Итерации прекращаем, когда нет возможности выполнить ни одну из 3 операций

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 15:03 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Что-то мне кажется сильно сложнее... не считал - просто Ащущенье

Добавлено спустя 1 минуту 4 секунды:
Как это вы сможете двигать одну единицу, не двигая другие...
Это ж дерево сильно разрастающееся!

Добавлено спустя 3 минуты 14 секунд:
Ой, блин, все забываю, вы ж условия поменяли :))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 15:08 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
После "деления" это будет возможно

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 19:12 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Еще мысль. Преобразуем матрицу А в направленный граф с n узлами. Элемент (i,j) матрицы преобразуется в ребро с весом А(i,j) и направлением от i к j. Применяем алгоритм поиска кратчайших путей, например [[ru:Алгоритм Флойда — Уоршелла]]. Для всех ребер, входящих в найденные пути, пишем 1 в матрицу решения.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 19:31 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Что-то я не понял, как будут соблюдаться условия задачи...
и какой :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 20:34 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
мб таки ГА ? делаем хромосому и n-1 * n генов и вперед ) критерий проверять перемножением или суммой...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 20:44 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Андрей, погоди, что-то я сразу не вкурил. То что ты сначала рассказал - это же почти классическая переведенная в матрицы задача коммивояжера на ориентированном графе? A[i,j] - время в пути из i в j. B[i,j] - используем это ребро в выбранном кольцевом пути по всем городам или нет. Как раз получается B[i,j] или 0 или 1.

Сумма B[i,j] по j от 0 до n-1 при любом i равна 1, сумма B[i,j] по i от 0 до n-1 при любом j равна 1 - это типа в каждый город должны ровно 1 раз войти и ровно 1 раз выйти.

Тут же понятно, почему B[i,i]=0 при любом i :) нечего из i в i ходить :)

Добавлено спустя 30 секунд:
Только в коммивояжере должен быть 1 цикл, а у тебя разрешено несколько, лишь бы все города были охвачены :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 20:47 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
не только несколько, но и пути с пересечениями...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачка
СообщениеДобавлено: 25 дек 2009, 20:49 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
В исходной задаче где по 1 единице в каждом столбце или строке - какие еще пересечения?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 91 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO