Архив автора: admin

Укрепляйте силу стремления к целям!

смысл жизни высокая цель

Укрепляйте силу стремления к целям!

Ставьте высокие цели и достигайте их легко и уверенно!

Как достичь любой цели без посторонней помощи?

prednaznachenie малышВспомните, было ли в вашей жизни такое — вы пытались сделать что-то важное, необходимое…

          • Скатиться первый раз на лыжах с крутой «взрослой» горки…
          • Впервые выйти на сцену, когда от ужаса не видишь лиц в зале, на ватных ногах…
          • Сказать наконец той самой (или тому самому) «привет, ты мне давно нравишься» …
          • Читать

          Оптимизация с учетом предпочтений

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

          Оптимизация распределения студентов по комнатам

          Сегодня мы решим задачу о распределении студентов по комнатам в общежитии с учетом их основного и альтернативного пожеланий. Хотя формулировка довольно специфична, ее можно легко обобщить на похожие задачи, – тот же самый код годится для распределения игроков по столам в онлайновой карточной игре, для распределения ошибок между разработчиками в большом программном проекте и даже для распределения работы по дому между прислугой. Как и раньше, наша цель – собрать информацию об отдельных людях и найти такое сочетание, которое приводит к оптимальному результату.

          В нашем примере будет пять двухместных комнат и десять претендующих на них студентов. У каждого студента есть основное и альтернативное пожелание.

          # Двухместные комнаты
          dorms = ['Zeus','Athena','Hercules','Bacchus','Pluto']

          # Люди и два пожелания у каждого (основное, второстепенное)
          prefs = [('Toby', ('Bacchus', 'Hercules')),
          ('Steve', ('Zeus', 'Pluto')),
          ('Karen', ('Athena', 'Zeus')),
          ('Sarah', ('Zeus', 'Pluto')),
          ('Dave', ('Athena', 'Bacchus')),
          ('Jeff', ('Hercules', 'Pluto')),
          ('Fred', ('Pluto', 'Athena')),
          ('Suzie', ('Bacchus', 'Hercules')),
          ('Laura', ('Bacchus', 'Hercules')),
          ('James', ('Hercules', 'Athena'))]

          Сразу видно, что удовлетворить основное пожелание каждого человека не удастся, так как на два места в комнате Bacchus имеется три претендента. Поместить любого из этих трех в ту комнату, которую он указал в качестве альтернативы, тоже невозможно, так как в комнате Hercules всего два места.

          В приведенном примере общее число вариантов порядка 100 000, то можно перебрать их все и найти оптимальный. Но если комнаты будут четырехместными, то количество вариантов будет исчислять триллионами.

          Представление решения

          В каждой комнате должно оказаться ровно два студента. Будем считать, что в каждой комнате есть два отсека, то есть всего их в нашем случае будет десять. Каждому студенту по очереди назначается один из незанятых отсеков; первого можно поместить в любой из десяти отсеков, второго – в любой из оставшихся девяти и т. д.
          Область определения для поиска (смотри предыдущую статью):
          # [9, 8, 7, 6,..., 1]
          domain = [i for i in xrange(9, 0, -1)]

          Целевая функция

          Целевая функция работает следующим образом. Создается начальный список отсеков, и уже использованные отсеки из него удаляются. Стоимость вычисляется путем сравнения комнаты, в которую студент помещен, с двумя его пожеланиями. Стоимость не изменяется, если студенту досталась та комната, в которую он больше всего хотел поселиться; увеличивается на 1, если это второе из его пожеланий; и увеличивается на 3, если он вообще не хотел жить в этой комнате.

          def dorm_cost(vec):
          cost=0

          # Создаем список отсеков, т.е. первые 2 места - 0 отсек и т.д.
          slots = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]

          # Цикл по студентам, i - порядковый номер студента
          for i in xrange(len(vec)):
          x = int(vec[i])
          dorm = dorms[slots[x]]
          pref = prefs[i][1]
          print x, '->', slots[x],'->', prefs[i][0], pref, '->', dorm

          # Стоимость основного пожелания равна 0, альтернативного – 1
          # Если комната не входит в список пожеланий, стоимость увеличивается на 3
          if pref[0] == dorm: cost += 0
          elif pref[1] == dorm: cost += 1
          else: cost += 3

          # Удалить выбранны й отсек
          # Это самое важное действие тут,
          # прошу особо обратить на него внимание и учесть, что элементы сдвигаются
          del slots[x]

          return cost

          При конструировании целевой функции полезно стремиться к тому, чтобы стоимость идеального решения (в данном случае каждый студент заселился в комнату, которую поставил на первое место в своем списке предпочтений) была равна нулю. В рассматриваемом примере мы уже убедились, что идеальное решение недостижимо, но, зная о том, что его стоимость равна нулю, можно оценить, насколько мы к нему приблизились. У этого правила есть еще одно достоинство – алгоритм оптимизации может прекратить поиск, если уже найдено идеальное решение.

          Оптимизация

          Всем кто не изучил методы оптимизации в предыдущей статье, бегом изучать!) Хорошим мальчикам и может даже девочкам, импортировать любой из методов и запустить!) Я, для примера, попробую на генетическом алгоритме.

          result, score = genetic_optimize(domain, dorm_cost)
          print result, score
          Например у меня, нашелся такой результат [7, 1, 2, 0, 0, 1, 2, 1, 0] 1, что соответствует следующему выводу:

          7 -> 3 -> Toby (‘Bacchus’, ‘Hercules’) -> Bacchus
          1 -> 0 -> Steve (‘Zeus’, ‘Pluto’) -> Zeus
          2 -> 1 -> Karen (‘Athena’, ‘Zeus’) -> Athena
          0 -> 0 -> Sarah (‘Zeus’, ‘Pluto’) -> Zeus
          0 -> 1 -> Dave (‘Athena’, ‘Bacchus’) -> Athena
          1 -> 2 -> Jeff (‘Hercules’, ‘Pluto’) -> Hercules
          2 -> 4 -> Fred (‘Pluto’, ‘Athena’) -> Pluto
          1 -> 3 -> Suzie (‘Bacchus’, ‘Hercules’) -> Bacchus
          0 -> 2 -> Laura (‘Bacchus’, ‘Hercules’) -> Hercules

          Т.е. не устроило только Lauru и то, учтен был ее 2й вариант)

          Вместо вывода

          Итак, надеюсь, я показал, что используя одни алгоритмы, но меняя область определения и принцип расчета целевой функции, мы можем решить абсолютно разные оптимизационные задачи!)

          Автор: Pavel Petropavlov

          Задачи оптимизации

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

          У методов оптимизации весьма широкая область применения: в физике они используются для изучения молекулярной динамики, в биологии – для прогнозирования белковых структур, а в информатике – для определения времени работы алгоритма в худшем случае. В НАСА методы оптимизации применяют даже для проектирования антенн с наилучшими эксплуатационными характеристиками. Выглядят они так, как ни один человек не мог бы вообразить.

          Мы же, для примера, возьмем классическую задачу группового путешествия!)
          Читать

          Научитесь уверенно и активно достигать своих целей!

          наполнение энергиейСохраняйте концентрацию на том, что действительно важно для Вас!

          Наполняйтесь энергией для действий себе на благо! 

          Научитесь уверенно и активно достигать своих целей!

           

          Заработок в Socialtools.ru. Монетизация соцсетей (ВКонтакте, Одноклассники, Mail.ru, Facebook, Twitter и т.д.)

          Всем привет! Друзья сегодня речь пойдёт об ещё одном сервисе под названием Socialtools.
          С помощью данного сервиса можно легко монетизировать соцсети (ВКонтакте, Одноклассники, Mail.ru, Facebook, Twitter и т.д.) Проекту более 3 лет, он уже имеет свой непрогибаемый авторитет и создаёт серьёзную конкуренцию аналогичным проектам. Как уже писал вам выше, я конспектирую проекты в которых я работал и на которых работаю до сих пор. С проектом Socialtools работаю уже более года, за всё время мною проведённое в данном сервисе, ни разу не замечал никаких недостатков с их стороны. Задании много, платят вовремя и на мой взгляд это самое главное. Цена одного заказа колеблется от 1.50 руб до 500 руб. Заказы принимают и выполняют очень быстро, поэтому без малейшего сомнения беритесь за любое свободное. Читать