П М
П М личный блог
28 августа 2021, 18:26

Гипотеза Коллатца и метод Монте-Карло при поиске Грааля.

Все знают известную гипотезу Коллатца о числовых рядах и метод численных экспериментов Монте-Карло, который применяли в Лос-Аламосе при создании ядерной бомбы США. *)

Я хотел поднять тему проверки алго-стратегий на примере этой задачи и этого подхода. Гипотеза Коллатца, на настоящий момент не доказана и связана с большим массивом цифр и рядов. Её можно либо доказать математически, либо опровергнуть численными методами, например случайно подобрав число, которое покажет что гипотеза не верна.
Очевидно, что одно число случайным образом найти легче, если оно есть, особенно если предположить что их много **). Легче найти одно из многих, чем перебрать абсолютно все что есть.

Теперь к нашим алго-стратегиям. По сути поиск Грааля — это постройка некоей гипотезы (ради хвастовства их называют стратегиями), и затем тестирование её на истории. История же это всего-навсего некий случайный ряд, который уже есть. В будущем ряд будет другим, и столь же случайным как и в прошлом. Можем ли мы перебрать все возможные варианты прошлого и будущего? По-моему непосильная задача.
То есть у нас есть лишь одно прошлое, которое мы можем использовать лишь чтобы опровергнуть нашу гипотезу. Либо чтобы её доказать, мы должны сгенерировать _все_ возможные варианты прошлого и будущего, численно и прогнать нашу стратегию-гипотезу через них.
Ну или математически доказать, что вот именно такая торговля будет бесконечно приносить доход. Тоже выглядит как нонсенс.
Остаётся только верить, что история, на которой не разоряется робот, даст нам прибыль в будущем. Доказать это историей вчистую — «в общем» мы не можем! Только «не опровергнуть».
И вот на этом краешке рациональности и сидят болтая ножками над пропастью убытков и сливов успешные алготрейдеры.

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

*) Если вы при этих словах почувствовали неудобство, значит этот кликбейкт-хайп-метод сработал.
**) Вот, например, программка, которая выдаёт «предположительно» числа, которые не складываются за 1 000 000 итераций в 1, то есть возможно нарушают гипотезу (надо проверять «до конца»)
public class ГипотезаКоллатца {
	static Random rnd = new Random();
	static BigInteger THREE = new BigInteger("3");
	static BigInteger genBig() {
		return new BigInteger(1000, rnd);
	}
	static boolean isOdd(BigInteger b) {
		return b.testBit(0);
	}
	static BigInteger iterate(int maxSteps, BigInteger b) {
		BigInteger bi = b;
		for (int i=0;i<maxSteps&&BigInteger.TWO.compareTo(bi)<1;i++){
			if (isOdd(b)) {
				bi = bi.divide(BigInteger.TWO);
			} else {
				bi = bi.multiply(THREE).add(BigInteger.ONE);
			}
		}
		return bi;
	}
	public static void main(String[] args) {
		for (int i=0;i<10;i++){
			var b = genBig();
			var bi = iterate(1000000, b);
			if (bi.compareTo(BigInteger.TWO)>0){
				System.out.println(i);
				System.out.println("'" + b + "'");
				System.out.println("'" + bi + "'");
				System.out.println();
			} else {
				System.out.println(".");
			}
		}
	}
} 
и первое же найденное кандидатное число: '9377897214047052446413091867867321397445267849887049287258514180855217329810859699227025543377461888005571102855313298648307974925660684942079487950339751789142749255403203631352114865462610029549753930151308853962071139769859558597477464671896308522755977736482286896117305008600237734179912082570506'
Если число итераций поднять с 1 млн, до 10 млн, то вычисления сильно замедлятся, а 1 млн обсчитывается достаточно быстро. Слава богу не вручную.
30 Комментариев
  • 3Qu
    28 августа 2021, 18:36
    Ну или математически доказать, что вот именно такая торговля будет бесконечно приносить доход.
    Вопрос первый. Зачем бесконечно?
  • 3Qu
    28 августа 2021, 18:39
    Остаётся только верить, что история, на которой не разоряется робот, даст нам прибыль в будущем.  
    Ну, это не вариант.
  • Мальчик buybuy
    28 августа 2021, 19:01
    Я думаю (чистое IMHO), что все адепты метода Монте-Карло — и ТС, и уважаемый 3Qu, возможно, совершают методологическую ошибку.

    Для того, чтобы найти оптимальную или субоптимальную стратегию методом тыка, необходимо, чтобы субоптимальные стратегии образовывали некое толстое множество (например, выпуклую область в пространстве параметров).

    Если же оптимальные или субоптимальные стратегии образуют тонкое множество (скажем, меры 0), то метод тыка никогда ничего не даст...

    С уважением

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн