Проверьте C и стандарты кодирования C++ в НАСА Центр космических полетов имени Годдарда . Одно правило, что я особенно отметил в стандарте C и принял в своем собственном коде, является тем, которое осуществляет 'автономную' природу заголовочных файлов. В файле реализации xxx.cpp для заголовка xxx.h, удостоверьтесь, что xxx.h является первым включенным заголовком. Если заголовок не будет автономным никогда, то компиляция перестанет работать. Это - красиво простое и эффективное правило.
единственное время это приводит Вас к сбою, то, если Вы портируете между машинами, и xxx.h заголовок включает, скажем,
, но
требует средств, которые, оказывается, сделаны доступными заголовком
на исходной платформе (таким образом
включает
), но средства не сделаны доступными
на другой платформе (они находятся в def.h
вместо этого, но
не включает
). Это не отказ правила, и проблема более легко диагностирована и решена, если Вы следуете правилу.
Вы можете или не можете предсказать исход игры, в зависимости от игр. Я считаю, что то, что вы видите, все еще является активной областью исследований, но есть разумные решения. В основном вы надеетесь, что сможете ранжировать игроков, так что игрок более высокого ранга обычно побеждает игрока более низкого ранга. В разных моделях это немного меняется, например, вероятность выигрыша зависит от разницы в рангах.
Один из подходов - использовать имитацию отжига для определения этих рангов. Выберите некоторую функцию для результата игры как функцию рангов игроков, и пусть соответствие заданного ранга будет вероятностью наблюдаемого результата при выбранных рангах. Повторите то же самое с разными уровнями согласно моделированию отжига.
Позвольте представить вам моего хорошего друга Байеса ... http://en.wikipedia.org/wiki/Bayesian_inference
Редактировать: Часть 1) Байес будет работать только для независимых исследований. Если выигрыш в одной игре каким-то образом увеличивает вашу вероятность выигрыша в следующей, вы можете продолжать! В противном случае это вообще не очень полезно.
Править: Часть 2) В любом случае, базой является следующая формула Байеса.
P(A|B) = P(B|A) P(A)
-----------
P(B)
Читается: «Вероятность A для данного B равна Вероятности. B для данного A раз Вероятность A на всем протяжении Вероятность B ". Чтобы проиллюстрировать это, продавец автомобилей с 3 дверями часто задает задачу.
У вас 3 двери и за одной дверью есть новенькая машина. Другой две двери не имеют абсолютно ничего. Затем хозяин просит вас выбрать дверь. Помните, есть двери «А», «Б» и 'C'. Таким образом, у вас 1/3 вероятность быть правым.
Хозяин, будучи щедрым парнем, открывает одна из других дверей. Он теперь дает у вас есть выбор либо придерживаться та же дверь или открывая другую дверь.
Я понял, что объяснение этого в ответе Stackoverflow займет вечность, и просто погуглил. Это проблема Монти Холла: http://en.wikipedia.org/wiki/Monty_Hall_problem . http://en.wikipedia.org/wiki/Monty_Hall_problem#Bayesian_analysis для байесовского раздела.
Изменить: Часть 3) Вы можете поискать «Байесовские сети», если вы решите подход может работать (но по гораздо более широкой схеме)
может делать приличные прогнозы для большинства игр. Например, если у вас есть шахматисты A, B и C, где A лучше B, а B лучше C, A, вероятно, также победит C. Однако в некоторых случаях это вообще не сработает. Приведу простой контрпример: если это соревнование камень-ножницы-бумага, и A всегда выбирает камень, B выбирает ножницы, а C выбирает бумагу, очевидно, вы не получите такой же тип корреляции.
Ваше лучшее Ставка состоит в том, чтобы протестировать вещи с небольшим подмножеством, если вы можете, возможно, используя некоторые уже существующие данные, если вы их найдете. Прочтите 1/4 случаев, сделайте свои прогнозы на основе этого набора,