Здравствуйте, _SZ_, Вы писали:
Q>>Ты читал книжку «Дядя Петрос и проблема Гольдбаха»?
_SZ>В 2013 году тернарная гипотеза Гольдбаха была окончательно доказана Харальдом Гельфготтом... ах, дядя Петрос...
Бинарная проблема Гольдбаха всё ещё далека от решения. (c) оттуда же
Дядя Петрос емнип, пытался решить именно бинарную.
Я немного допилил алгоритм, и хотя он мне всё ещё не нравится, но результаты довольно обнадёживающие.
Всего 2 машины, 5 потоков, работающих время от времени добились довольно неплохих результатов.
Так что можно немного поборзеть, и попробовать решить дерево целиком.
Я планировал добавить автоматическую статистику на сайт, но врядли у меня в ближайшее время получится.
Обещать что-то пока пожалуй тоже не буду.
И так, если вы хотите принять участие, заходите сюда, качайте windows или ubuntu версию.
Запускаете f5_spawn. По умолчанию он стартует с количеством проццессов, равных к-ву ядер в системе.
Можно предварительно отредактировать f5_spawn и вписать явно к-во процессов.
Также можно вписать src_name, чтобы идентифицировать себя вместо "somebody".
Я смогу потом в ручном режиме обработать логи, и выдать статистику по юзерам.
Для запуска на ubuntu возможно понадобиться доставить пакеты.
AB>На FreeBSD по прежнему собирается и запускается (увы, других серверов 24х7 нет)?
Не факт. Я переехал на отдельный сервер на облачном хостинге, а они как на зло все линуксовые.
Я проверю.
Здравствуйте, Шебеко Евгений, Вы писали:
ШЕ>Я немного допилил алгоритм, и хотя он мне всё ещё не нравится, но результаты довольно обнадёживающие. ШЕ>Всего 2 машины, 5 потоков, работающих время от времени добились довольно неплохих результатов. ШЕ>Так что можно немного поборзеть, и попробовать решить дерево целиком. ШЕ>Я планировал добавить автоматическую статистику на сайт, но врядли у меня в ближайшее время получится. ШЕ>Обещать что-то пока пожалуй тоже не буду.
ШЕ>И так, если вы хотите принять участие, заходите сюда, качайте windows или ubuntu версию. ШЕ>Запускаете f5_spawn. По умолчанию он стартует с количеством проццессов, равных к-ву ядер в системе. ШЕ>Можно предварительно отредактировать f5_spawn и вписать явно к-во процессов. ШЕ>Также можно вписать src_name, чтобы идентифицировать себя вместо "somebody". ШЕ>Я смогу потом в ручном режиме обработать логи, и выдать статистику по юзерам.
в можно сделать таски более продолжительные? а то много времени на скачку уходит.
или сервак какой свой написать, чтобы вгет каждый раз не запускать.
NB>в можно сделать таски более продолжительные? а то много времени на скачку уходит. NB>или сервак какой свой написать, чтобы вгет каждый раз не запускать.
Если очень уж быстро, возможно он ничего не считает?
Хотя я вас в статистике за сегодня вижу:
Некоторые решения решаются быстро, т.к. может быть ограниченое число вариантов из конкретной позиции.
Но вы можете увеличить глубину — будет медленнее. Но тогда и рейтинг в статистике у вас упадёт.
В f5_spawn.bat
set lookup_deep=3 можете увеличить до 4 или 5.
Главное не уменьшайте, а то это на качество решения влияет.
Ещё может быть вариант, что дерево переодически сплитится на сервере, в этот момент сервис оказывается недоступен.
Или просто сервак не доступен в какие-то моменты, из вашей точки по сетевым причинам.
Выглядит это так, как будто постоянно запросы идут.
Здравствуйте, Шебеко Евгений, Вы писали:
ШЕ>Статистика здесь
там до конца далеко?
у тебя данные о решении как сохраняются? я запускаю с глубиной 5, в дальнейшем все плохие варианты полученные при обходе будут повторно проверяться, или нет?
NB>там до конца далеко?
Прогресс есть, но ещё далеко.
Прогресс видно по новыми решениям, которые появляются, например, здесь
NB>у тебя данные о решении как сохраняются? я запускаю с глубиной 5, в дальнейшем все плохие варианты полученные при обходе будут повторно проверяться, или нет?
К сожалению, будут. 5 может очень круто.
Но <3 тоже ставить нельзя, дерево на диске очень сильно растёт за счёт тупиковых веток.
Для меня лучше, низкопроизводительный, но долгосрочны расчёт.
Лучше пустить один процесс, и даже понизить ему приоритет, но чтобы он молотил месяц.
Здравствуйте, Шебеко Евгений, Вы писали:
NB>>у тебя данные о решении как сохраняются? я запускаю с глубиной 5, в дальнейшем все плохие варианты полученные при обходе будут повторно проверяться, или нет? ШЕ>К сожалению, будут.
ШЕ>5 может очень круто.
на трех проц мало нагружается
ШЕ>Но <3 тоже ставить нельзя, дерево на диске очень сильно растёт за счёт тупиковых веток.
ШЕ>Для меня лучше, низкопроизводительный, но долгосрочны расчёт. ШЕ>Лучше пустить один процесс, и даже понизить ему приоритет, но чтобы он молотил месяц.
я на домашнем запускаю. на ночь/рабочий день, естественно вырубаю.
Здравствуйте, Шебеко Евгений, Вы писали:
ШЕ> Не факт. Я переехал на отдельный сервер на облачном хостинге, а они как на зло все линуксовые. ШЕ> Я проверю.
К сожалению, под FreeBSD как-то не очень. Внес следующие изменения в CMakeLists.txt (протестировал на FreeBSD и Linux):
Со скриптами сходу не разобрался, по этому попытался написать с нуля, которые бы работали под FreeBSD и Linux (см. ниже), однако немного смущает то, что уж очень часто дергается wget для получения и отправки данных (буквально каждую секунду по запросу — в итоге большее количество времени тратится только на него, а не обсчет). По этому, дабы ничего не испортить, пока у себя все процессы остановил, прошу проверить скрипты запуска и, если все правильно, то дать добро (или наоборот, написать где неправильно).
f5_spawn.sh:
#!/bin/sh
# contributor name
SRC_NAME="somebody"
# max process count (leave empty to use all processors)
PROCESS_COUNT=""
# depth
LOOKUP_DEEP=2
# web service
URL="http://fiveinline.info/solutions/root/solve.php"
# check depency
OS=$(uname)
if [ "${OS}" = "Linux" ]; then
DAEMON=$(which daemon)
if [ -z "${DAEMON}" ]; then
echo "daemon not found, please install it and try again"
exit 1
fi
fi
FETCH=""
if [ -n "$(which wget)" ]; then
FETCH="wget -q -O"
elif [ -n "$(wich fetch)" ]; then
FETCH="fetch -q -o"
elif [ -n "$(which curl)" ]; then
FETCH="curl -s -o"
else
echo "Fetch command not found"
exit 1
fi
# get processors count
if [ -z "${PROCESS_COUNT}" ]; then
if [ "${OS}" = "Linux" ]; then
CPU_COUNT=$(cat /proc/cpuinfo | grep processor | wc -l)
elif [ "${OS}" = "FreeBSD" ]; then
CPU_COUNT=$(sysctl hw.ncpu | cut -d ' ' -f 2)
else
echo "Unsupported OS: ${OS}"
exit 1
fi
PROCESS_COUNT="${CPU_COUNT}"
fi
export URL="${URL}"
export SRC_NAME="${SRC_NAME}"
export LOOKUP_DEEP="${LOOKUP_DEEP}"
export PROCESS_COUNT="${PROCESS_COUNT}"
export FETCH="${FETCH}"
# spawn processes
cd `dirname $0`
BASE_DIR=$(pwd)
PROCNO=0
while [ "${PROCNO}" -lt "${PROCESS_COUNT}" ]
do
WORK_DIR="${BASE_DIR}/spawn/${PROCNO}"
if [ ! -d "${WORK_DIR}" ]; then
mkdir -p "${WORK_DIR}"
if [ $? -ne 0 ]; then
exit $?
fi
fi
cd "${WORK_DIR}"
if [ "${OS}" = "Linux" ]; then
daemon --chdir="${WORK_DIR}" --pidfile="${WORK_DIR}/pid" "${BASE_DIR}/f5_solve.sh"
elif [ "${OS}" = "FreeBSD" ]; then
daemon -p "${WORK_DIR}/pid" "${BASE_DIR}/f5_solve.sh"
else
echo "Unsupported OS: ${OS}"
exit 1
fi
PROCNO=$(expr "${PROCNO}" + 1)
done
f5_solve.sh:
#!/bin/sh
KEY_FILE="key_file"
while true
do
${FETCH} "${KEY_FILE}" "${URL}?src_name=${SRC_NAME}&cmd=get_job"
if [ $? -ne 0 ]; then
exit $?
fi
KEY=$(cat "${KEY_FILE}")
if [ -z "${KEY}" ]; then
exit 1
fi
echo "Current key is: ${KEY}"
RESULT=$(../../solver "${KEY}")
if [ $? -ne 0 ]; then
exit $?
fi
echo "Result is: ${RESULT}"
N=$(echo "${RESULT}" | awk '{print $2}')
W=$(echo "${RESULT}" | awk '{print $3}')
F=$(echo "${RESULT}" | awk '{print $4}')
${FETCH} result_file "${URL}?src_name=${SRC_NAME}&cmd=save_job&key=${KEY}&n=${N}&w=${W}&f=${F}"
if [ $? -ne 0 ]; then
exit $?
fi
done