Проект улучшения любых плохих видеофайлов
ОПИСАНИЕ ПРОГРАММЫ
Для создания алгоритма я сделал программу, которая представляла из себя:
Т.к. возможных вариантов очень много, то мною на этапе генерирования новых вариантов был использован генетический метод генерирования новых программ.
Как программа работает:
1. После запуска программа генерирует список "случайных" алгоритмов. Т.е. использую функцию random() и набор правил генерируются алгоритмы. После этого для каждого алгоритма узнается целевая функция. В моем случае целевая функция это средняя ошибка на каждый пиксель + среднее число команд, которое потребовалось алгоритму до завершения обработки картинки.
2. Производится попытка синхронизации работы с основным сервером. Для этого вызывается стандартная программа ftp.exe, которая должна находится в каталоге windows\system32 (Довольно подробное описание здесь). Программа берет последние результаты рассчетов алгоритма с моего ftp-сервера (сейчас это будет сервер ftp://yo.lv), т.е. по ftp протоколу перекачивается из интернета файл wvideo.rar который и распаковывается (автоматически). Имеется возможность настроить адреса ftp-серверов так, что суточный внешний трафик любой группы компьютеров (например 100 компов в общаге) будет не больше 500 килобайт! А остальной трафик будет внутригрупповой (для этого должен быть установлен ftp-сервер)
После этого все результаты сортируются по целевой функции (целевая функция, в данном случае, вычисляется как разница между полученным изображением и желаемым изображением. Чем меньше эта сумма, тем, естественно, лучше). Те алгоритмы, которые обладают наименьшей целевой функцией записываются на диск, сжимаются программой rar.exe и пересылаются обратно на мой ftp сервер.
3. Генерятся новые порции случайных алгоритмов, но уже на основе наиболее лучших из существующих. К этим новым "особям" "природа" добавляет мутации. Таким образом появляются версии алгоритмов, которые могут быть лучше своих родителей, а могут быть и хуже. Как правило - хуже.
4. Если прошло много времени с момента последней синхронизации (больше 1 часа) или накопилось много удачных особей (удачными я называю тех особей, которые лучше хотя бы одного из своих родителей), то запускается пункт 2.
Результат работы программы (т.е. алгоритм) выглядит таким образом:
0
if k[k[175]]<k[4] then goto 7; |
Программа работает в скрытом режиме. Вызвать на экран ее можно нажав ShiftF12 (Win9x) или Alt-Shift (WinNT) при этом указатель мыши должен находится в левом-верхнем углу.
Старый вид программы-генератора алгоритмов. Первая строчка - статус на момент последней синхронизации: общее число иттераций, лучшая (минимальная) ошибка, время (в командах) которое затратил лучший вариант алгоритма и относительная ошибка.Серые буквы (если они есть) - следы работы программы ftp.exe. Желтые числа - записанные на диск варианты.
Темно-синие - текущие варианты. Так сказать: "рабочий процесс". (Наиболее плохие варианты не отображаются).
При запуске программы (а это может происходить и из StartUp) я внешней утилитой (MyRun) запускаю программу в свернутом виде с минимальным приоритетом (Idle). Правда это не спасает от некоторого притормаживания системы - памяти программа берет под себя около 22 мегов.
Мною также разработана методика управления программой по ftp при помощи автоматической загрузки обновлений (как файлов данных, так и исполняемых модулей). Благодаря этому пользователям не придется вручную делать обновления файлов - это произойдет автоматически во время следующего запуска программы.
Возможна ли синхронизация по электронной почте? Да, но в полуавтоматическом режиме. Если будет больше 3-х желающих, то сделаю в автоматическом (пока только один желающий).
Краткая история:
Первый вариант программы был запущен в конце октября 2000 года и было выяснено, что скорость перебора хоть и высокая, но скорость улучшения оставляет желать лучшего. Поэтому был почти сразу разработан вариант многопроцессорной работы (даже многомашинной) с синхронизацией работы по локальной сети.
Спустя неделю были выявлены 2-3 грубые ошибки и 3-4 мелкие.
Февраль 2001 года. Добавлена возможность работы через интернет (синхронизация идет через ftp-сервера). 16 числа был изменен алгоритм отсеивания плохих вариантов, в результате чего скорость перебора возросла в 10 раз, но все равно остается недостаточной.
Ищется последняя ошибка :-). Как в том анекдоте: Ламер у Хакера спрашивает: "А где у меня ошибка?" На что Хакер отвечает:
- В ДНК!!!
21 марта 2001- подозрение на ошибку при синхронизации.
26 марта 2001- подозрение на ошибку не снято, думаю перевести прогу на дельфи (сейчас прога написана под FreePascal 32 bit). На данный момент абсолютная ошибка снизилась до 62,65 (вместо 64,60), а относительная ошибка 0,948.
28 апреля 2001- получена первая работоспособная версия, написанная на Delphi. Соответсвенно существенно поменялся интерфейс и несколько изменились возможности (в частности не так заметна пользователю - в идеале она вообще не видна и не ощущается). Абсолютная ошибка снизилась до 57,886.
8 мая 2001- доделал программу под Винды. Выложил в разделе [ ИТОГ и загрузка]. Абсолютная ошибка снизилась до 57,864.
9 мая 2001- сделал всплытие в Win95/98. Мелкие доработки (несколько изменен загрузчик). Абсолютная ошибка 57,861.
6-may-02 - ошибка 28.33. Уже довольно долго.... Видимо нужно добовлять новые файлы для обучения (пока обучение ведется всего на 18 фотографиях маленького размера).
Минимальная конфигурация: 64 мегабайта памяти и постоянная связь с интернетом (скоро будет: "хотя бы раз в сутки связь с интернетом"). Если на компьютере будет меньше памяти, то программа будет притормаживать систему.
Желательная конфигурация: 96 мегабайт памяти и больше, процессор на уровне Intel Pentium II 450 MHz, операционная система WinNT (но сойдет и Win9x), постоянный доступ в интернет.
Суточный траффик около 800 килобайт (при желании может быть уменьшен до 400 килобайт и меньше). Траффик латвийский (скоро будет российский). Возможны варианты.
Сейчас ищутся бескорыстные люди, которые могут погонять мою программу на как можно большем числе компьютеров.
Писать imageman@inbox.lv
Другие страницы Владимира Чаплинского