Здравствуйте, гость Правила · Помощь

»  Новая система оценки силы руки Подписаться | Сообщить другу | Версия для печати
      » 17/08/2016, 12:32,  Bulldozer 
Тимец ("17/".$m["авг"]."/2016," 00:00)
В таблице показаны результаты для SAYC (тотальные пункты) и моей системы.Значения вычислены в переложении что партнёры точно знают суммарную силу и ставят контракт точно по предписанию.Это сильно идеальная ситуация.В реальности их знания не точные. Поэтому сами числа не имеют большого смысла. Имеет смысл их разница.

Пока я не пойму, как получены эти числа (1.77 и 2.69), естественно, не пойму и смысл их разницы. Неважно, что они не имеют большого смысла по отдельности. Хочу знать, как они получены.
      » 17/08/2016, 15:15,  SERGEY_BIG 
Своя система торговли/оценки руки - как корь. Пройдёт.
      » 17/08/2016, 16:13,  Тимец 
Bulldozer ("17/".$m["авг"]."/2016," 12:32)
Тимец ("17/".$m["авг"]."/2016," 00:00)
В таблице показаны результаты для SAYC (тотальные пункты) и моей системы.Значения вычислены в переложении что партнёры точно знают суммарную силу и ставят контракт точно по предписанию.Это сильно идеальная ситуация.В реальности их знания не точные. Поэтому сами числа не имеют большого смысла. Имеет смысл их разница.

Пока я не пойму, как получены эти числа (1.77 и 2.69), естественно, не пойму и смысл их разницы. Неважно, что они не имеют большого смысла по отдельности. Хочу знать, как они получены.

Каждую сдачу играло несколько пар. Разбиваем эти игры по группам по играющей линии и деноминациям контракта. Таким образом получаем группы контрактов игравшихся на одной и той же сдаче одной и той же линией с одной и той же деноминацией. Допустим сдача такая-то, играли N-S, контракт в пиках. При этом неважно на каком уровне был контракт. Допустим кто-то заказал 3п, кто-то 4п, кто-то 5п. Теперь оцениваем силу играющей пары по методу который мы тестируем. По оценке этого метода вычисляем оптимальный уровень контракта в данной деноминации. Далее применяем этот уровень контракта к каждой игре в группе и смотрим на сколько поменялся бы результат в процентах или импах для этой конкретной игры внутри группы. Усредняем этот результат по группе. Потом усредняем этот результат по всем группам в наборе анализируемых игр. Этот средний результат Вы и видите в таблице в статье.
Суть такого метода сравнения можно выразить словами так. Предположим что мы с партнёром можем передать друг другу информацию о нашей силе с точностью до пункта. Далее предположим что мы будем оценивать нашу руку и выставлять уровень контракта точно как предписано в описании этой системы оценки (сила рук + критические уровни контрактов). И ещё предположим что в любой момент мы можем выставить и играть тот уровень контракта какой захотим (от 1 до 7). Насколько бы мы лучше выступили таким образом.
Ясно что хотя принципиально подход к такой оценке довольно логичный, он сильно идеальный. В реальной игре есть масса факторов которые исказили бы результат. Я это сам прекрасно понимаю. Например, в реальной игре сила руки не передаётся с точностью до пункта, не всегда возможно выставить контракт любого уровня так как он может быть уже пройден торговлей. Также вычисление процентов и импов только по группе игр неправильное. При рассчёте надо учитывать все игры на сдаче включая игравшиеся оппонентами. Кроме того не совсем ясно что делать с контрами и реконтрами из реальных сдач - переносить их на идеальные контракты или нет? И так далее. В связи с этими факторами идеальная оценка будет скорее всего завышена. Именно это Вы и наблюдаете в таблице. Значения для тотальных пунктов SAYC больше нуля. Хотя в реальности они должны быть где-то около нуля. Поэтому я и сравниваю цифры между своей системой и общепризнанной пытаясь взаимно вычесть эти факторы.
Это лучший подход который я мог придумать. Очень трудно теоретически сравнить два метода если только не стравить две пары играющих роботов. Одни будут использовть метод А против других с методом Б. Но для этого надо делать таких роботов, а это ещё дольше.
Если у вас есть идеи как можно более точно пресказать качество оценки - пожалуйста поделитесь. Я попробую их использовать.

Это сообщение отредактировал Тимец - 17/08/2016, 18:13
      » 18/08/2016, 06:06,  Bulldozer 
Я понял. Возможно, использованный метод чрезмерно сложный, потому что "роботов" использовать как раз можно. В качестве робота можно использовать программу, которая умеет генерировать сдачи и определять минимакс. Думаю, этого вполне достаточно для поставленных целей. Например, можно написать скрипт для программы Deal by Thomas Andrews.
Вот простейший пример-скрипт (можно сказать, болванка для дальнейшего улучшения), который сравнивает два "глупых" метода оценки количества взяток, опираясь на минимакс сдачи.
Генерируется сдача, считается минимакс. Если была дана контра, то сдача отбрасывается. Определяется, какая линия будет оценивать количество взяток (у кого запись положительная). Дальше вызываются методы оценки.
Метод №1: количество HCP (4-3-2-1) на двух руках поделить на 3.
Метод №2: то же самое, но считаем только тузы (10-0-0-0).
В методы в качестве параметров передаются обе руки и деноминация контракта, которую определил минимакс. Деноминацию, впрочем, эти методы не используют.

Скрипт выводит по три числа на каждую сдачу: количество взяток при минимакс-контракте, оцениваемое кол-во взяток по методу №1 и по методу №2. В конце для каждого метода выводит МО разницы между взятками метода и взятками минимакса, плюс соответствующее СКО. СКО - главный критерий: чем меньше, тем лучше.

CODE
source lib/parscore.tcl

set n_deals 0
sdev sd1
sdev sd2

proc write_deal {} {
   global n_deals

   set n_deals [expr {$n_deals + 1}]

   # Determine "minimax" contract and its score
   set _mm_result [parscore south EW]
   set mm_contract [lindex $_mm_result 0]
   set mm_declarer [lindex $_mm_result 1]
   set mm_score [lindex $_mm_result 2]
   set mm_tricks [lindex $_mm_result 3]
   set mm_denom [lindex $mm_contract 1]

   # Exclude doubled contracts
   set is_doubled [lindex $mm_contract 2]
   if {$is_doubled == "doubled"} {
       return
   }

   # Determine whose deal it is
   if {$mm_score >= 0} {
       set hand1 north
       set hand2 south
   } else {
       set hand1 west
       set hand2 east
   }

   # Evaluate the number of tricks: method #1
   set t1 [method1 $hand1 $hand2 $mm_denom]
   # Evaluate the number of tricks: method #2
   set t2 [method2 $hand1 $hand2 $mm_denom]

   # Add some stats
   sd1 add [expr {$t1 - $mm_tricks}]
   sd2 add [expr {$t2 - $mm_tricks}]

   puts "$mm_tricks $t1 $t2"
   #puts "$mm_denom $t1 $t2 $_mm_result {[north]} {[east]} {[south]} {[west]} - $n_deals"
}


main {
   accept
}

deal_finished {
   # Stats output
   puts "-----------------------"
   puts "[sd1 average] [sd1 sdev]"
   puts "[sd2 average] [sd2 sdev]"
}


holdingProc silly1 {A K Q J} {expr {$A*4+$K*3+$Q*2+$J*1}}
holdingProc silly2 {A} {expr {$A*10}}

proc method1 {hand1 hand2 denom} {
   #puts "hand1 = $hand1, hand2 = $hand2, denom = $denom"
   return [expr {([silly1 $hand1] + [silly1 $hand2]) / 3.0}]
}

proc method2 {hand1 hand2 denom} {
   #puts "hand1 = $hand1, hand2 = $hand2, denom = $denom"
   return [expr {([silly2 $hand1] + [silly2 $hand2]) / 3.0}]
}


Это сообщение отредактировал Bulldozer - 18/08/2016, 06:48
      » 18/08/2016, 10:22,  Тимец 
То что вы описываете - это проверка точности метода оценки количества взяток в предположении что играют роботы на открытых картах. С этим ни у кого проблем нет - все алгоритмы стандартные. При этом не имеет значение работатете ли вы на открытых картах с определителем минимакса или с реальными результатами игр. Это первая из проверок которую я делал. Вы же изначально спрашивали про вторую - вычисление изменения счёта (импы и макс) при применении какой-либо системы оценки. А вот это уже тёмный лес. Я видел очень мало публикаций в интернете о других методах оценки которые вообще хотя бы как-то проверяют качество изобретения. И если это случается, то это именно та самая лёгкая и очевидная первая проверка. О второй никто даже и не заикается!
Я понимаю что их легко спутать когда быстро про них читаешь.
smile.gif
Пожалуйста перечитайте мой объяснительный пост ещё раз. Надеюсь Вы поймёте что именно она проверяет и как. Это совсем не то же самое что СКО по взяткам. И если этот подход кажется слишком сложным, то это именно потому что довольно трудно вообразить как это вообще правильно посчитать. Мой вариант мне кажется наиболее логичным приближением, хотя явно не очень точным. Но я не знаю как его сделать точнее.
      » 18/08/2016, 10:28,  Тимец 
Второй момент касается использования машинно вычисленных взяток в противоположность взяткам в реальных играх. Есть приверженцы обоих подходов. Первый математически более понятный и легкий в рассчёте. Но эта лёгкость приходит с упрощением и игнорированием факторов случающихся в реальной сдаче. Влияние предыдущей торговли, сыгранности партнёров, типа виста, мастерства розыгрыша, обман, угадки - всё это уходит. А это влияет на результат. Возьмите например двухсторонний импас. На открытых картах он идёт 100%. А на закрытых 50%. Чувствуете разницу?
Именно поэтому начинал то я на математических моделях типа анализа открытых карт, но потом переключился на реальные сдачи. Их хоть и труднее оседлать, но результат будет гарантированно играбельный и отражающий реальные ситуации, а не пробирочный.
      » 18/08/2016, 11:42,  Bulldozer 
Я читал Ваш пост и, думаю, что понял его. Но дело в том, что я не понимаю, чем же это проверка второго рода (импы и максы) является намного более сложной, чем проверка первого рода (взятки). Поэтому я не упомянул её и привёл пример проверки первого рода.
Пожалуйста, ниже идёт проверка "на импы". Скрипт вычисляет результаты гипотетических контрактов, определённые методами №1 и №2 в деноминации, диктуемой минимаксом. Методы - тупые заглушки. №1 всегда играет на втором уровне, а №2 на третьем. В идеале вы создаёте метод, который не просто возвращает число 2 или 3, а вычисляет его в зависимости от онерной силы, дины мастей и т.д.
Результаты №1 и №2 в тотальных пунктах вычитаются друг из друга и переводятся в импы. Собирается статистика и выводится в конце.
То же самое можно сделать и для максов - не проблема.

Замечание, что проверка на непонятно кем сыгранных реальных сдачах лучше проверки на открытых картах, мне кажется сомнительным. Не углубляюсь в эту тему пока.

CODE
source lib/score.tcl
source lib/parscore.tcl
source mylib/imp.tcl

set n_deals 0
sdev sd1
sdev sd2

proc write_deal {} {
   global n_deals

   set n_deals [expr {$n_deals + 1}]

   # Determine "minimax" contract and its score
   set _mm_result [parscore south nonvul]
   set mm_contract [lindex $_mm_result 0]
   set mm_declarer [lindex $_mm_result 1]
   set mm_score [lindex $_mm_result 2]
   set mm_tricks [lindex $_mm_result 3]
   set mm_denom [lindex $mm_contract 1]

   # Exclude doubled contracts
   set is_doubled [lindex $mm_contract 2]
   if {$is_doubled == "doubled"} {
       return
   }

   if {$mm_score >= 0} {
       set hand1 north
       set hand2 south
   } else {
       return
   }

   set level1 [method1 $hand1 $hand2 $mm_denom]
   set contract1 $level1
   append contract1 " "
   append contract1 $mm_denom
   set score1 [score $contract1 nonvul $mm_tricks]

   set level2 [method2 $hand1 $hand2 $mm_denom]
   set contract2 $level2
   append contract2 " "
   append contract2 $mm_denom
   set score2 [score $contract2 nonvul $mm_tricks]

   # Calculate the differences in total points and IMPs
   set tp_diff [expr {$score1 - $score2}]
   set imp_diff [imp $tp_diff]

   # Stats
   sd1 add $tp_diff
   sd2 add $imp_diff

   puts "$mm_denom / $mm_tricks / $level1 $level2 / $score1 $score2 / $imp_diff {[north]} {[east]} {[south]} {[west]} - $n_deals"
}


main {
   accept
}

deal_finished {
   # Stats output
   puts "-----------------------"
   puts "[sd1 average] [sd1 sdev]"
   puts "[sd2 average] [sd2 sdev]"
}


// Returns the contract level that is estimated as the best
proc method1 {hand1 hand2 denom} {
   return "2"
}

// Returns the contract level that is estimated as the best
proc method2 {hand1 hand2 denom} {
   return "3"
}
      » 18/08/2016, 18:44,  Тимец 
Можно и так к этому подойти. Сделать так сказать матч между двумя методами оценки и стравить их друг с другом. Таким образом в каждой раздаче будут соревноваться две игры. В принципе логично. Кто набирает больше импов, тот и победил. Попробую такую проверку прогнать - посмотрю что получится. Спасибо за идею.
С другой стороны такая проверка в принципе прямолинейная и позволяет сравнить две модели, но непонятно как она себя поведёт в реальной игре. Т.е. допустим мы проверили что метод А против метода Б в среднем выигрывает 1 имп/сд. Это нам говорит что метод А лучше метода Б, но не даёт информации насколько метод А улучшит результаты реальных игр, если его применить. Я как раз и пытался оценить последнее. Ведь может оказаться что метод А лучше, но в реальных играх он даёт очень очень малый прирост так что овчинка может не стоить выделки.
Вот к примеру торговля в реальной игре: ... - 3п - (4ч) - ?. Один метод говорит вам что надо ставить 4п, а другой что 3п. Но 3п вы поставить уже не можете - оппы будут играть 4ч вместо этого. Т.е. мы уже сравниваем не 3п с 4п, а наши 4п с 4ч оппов. Результат может сильно отличаться.

Это сообщение отредактировал Тимец - 18/08/2016, 19:12
      » 18/08/2016, 20:21,  Bulldozer 
Тимец ("18/".$m["авг"]."/2016," 18:44)
С другой стороны такая проверка в принципе прямолинейная и позволяет сравнить две модели, но непонятно как она себя поведёт в реальной игре. Т.е. допустим мы проверили что метод А против метода Б в среднем выигрывает 1 имп/сд. Это нам говорит что метод А лучше метода Б, но не даёт информации насколько метод А улучшит результаты реальных игр, если его применить. Я как раз и пытался оценить последнее. Ведь может оказаться что метод А лучше, но в реальных играх он даёт очень очень малый прирост так что овчинка может не стоить выделки.

Да, можно сравнивать метод A не напрямую с методом B, а с результатами реальных сдач R и получить IMP(A - R), что, собственно, и содержится в Вашей таблице. Но боюсь, что точность такого сравнения оставляет желать лучшего. Вы и сами писали, что в таком случае есть масса искажающих факторов, что в результате сами числа в упомянутых таблицах не имеют большого смысла, а имеет смысл разница между соответствующими показателями каждого метода, то есть, что лучше использовать метрику IMP(A - R) - IMP(B - R)*
Так что определитесь для себя, достаточно ли Вы доверяете IMP(A - R). Я бы не слишком доверял.
Это снова приводит нас к сравнению A непосредственно с B. Плюс я фактически предложил классическую метрику IMP(A - B). Зависимость от R, которая есть в метрике *, не нужна - она только вносит искажения из-за нелинейности функции IMP, ведь R не взаимоуничтожается, и математический смысл его присутствия от меня ускользает.

Второй момент. В одном из постов Вы делаете предположение, что большинство использует метод "тотальные пункты" (термин вроде неудачный, кстати, потому что возникает путаница - тотальными пунктами принято называть очки за контракт, например, 400 за 3БК или их сумму/разницу). Если Вы правда в это верите, то тогда имеете полное право сравнивать Ваш новый метод с тем методом *напрямую*, чтобы определить, какой из них лучше в реальных сдачах.

()
Вот к примеру торговля в реальной игре: ... - 3п - (4ч) - ?. Один метод говорит вам что надо ставить 4п, а другой что 3п. Но 3п вы поставить уже не можете - оппы будут играть 4ч вместо этого. Т.е. мы уже сравниваем не 3п с 4п, а наши 4п с 4ч оппов. Результат может сильно отличаться.

Да, но не соображу, как это должно влиять на выбор метода проверки.

Это сообщение отредактировал Bulldozer - 18/08/2016, 20:22
      » 18/08/2016, 21:34,  Тимец 
Bulldozer ("18/".$m["авг"]."/2016," 20:21)
Да, можно сравнивать метод A не напрямую с методом B, а с результатами реальных сдач R и получить IMP(A - R), что, собственно, и содержится в Вашей таблице. Но боюсь, что точность такого сравнения оставляет желать лучшего. Вы и сами писали, что в таком случае есть масса искажающих факторов, что в результате сами числа в упомянутых таблицах не имеют большого смысла, а имеет смысл разница между соответствующими показателями каждого метода, то есть, что лучше использовать метрику IMP(A - R) - IMP(B - R)*
Так что определитесь для себя, достаточно ли Вы доверяете IMP(A - R). Я бы не слишком доверял.
Это снова приводит нас к сравнению A непосредственно с B. Плюс я фактически предложил классическую метрику IMP(A - B). Зависимость от R, которая есть в метрике *, не нужна - она только вносит искажения из-за нелинейности функции IMP, ведь R не взаимоуничтожается, и математический смысл его присутствия от меня ускользает.

Абсолютно согласен со всеми выкладками. Я собственно и не пытался математически обосновать свой подход. Его математический смысл никогда не был мне ясен. Опять же я абсолютно согласен что у IMP(A - B) есть совершенно чёткий математический смысл. Так что я планирую его посчитать и посмотреть что получилось.
Разногласие между нами не в том как мы понимаем эти два подхода, а в том как мы понимаем цель этого упражнения. Если цель выяснить какой метод лучше, то IMP(A - B) определённо поможет это выяснить. Я же поставил себе цель немного другую. Дать игрокам в руки инструмент который бы показывал статистически оптимальные уровнии контрактов. Для статистической оценки имеет большое значение наличие других контрактов даже в другой деноминации. К примеру мы оцениваем уровень риска для 3БК до зоны. Если бы сравнивали игру только один к одному как в варианте MP(A - B), то у нас было бы только 4 возможных результата: 2БК= (120), 2БК+1 (150), 3БК-1(-50), 3БК=(400). Соответственно, для MP сами величины значения не имеют. Имеет значение только их отношение больше-меньше. В результате такая оценка выдаст нам что 3БК надо играть при 50% успеха. В реальной же сдаче, когда присутствует множество других результатов (например 200 и 300), может оказаться что 400 очков это гораздо больший выигрыш чем -50 проигрыш. И тогда уровень риска может оказаться 30% успеха. Насколько статистически часто так будет случаться и насколько это будет отличаться от прямолинейного метода MP(A - B) - Я НЕ ЗНАЮ. Просто пытаюсь ответить на поставленный вопрос наиболее прямолинейным, хоть и не математически ясным методом.

Bulldozer ("18/".$m["авг"]."/2016," 20:21)
Второй момент. В одном из постов Вы делаете предположение, что большинство использует метод "тотальные пункты" (термин вроде неудачный, кстати, потому что возникает путаница - тотальными пунктами принято называть очки за контракт, например, 400 за 3БК или их сумму/разницу). Если Вы правда в это верите, то тогда имеете полное право сравнивать Ваш новый метод с тем методом *напрямую*, чтобы определить, какой из них лучше в реальных сдачах.

https://en.wikipedia.org/wiki/Hand_evaluation - В разделе "Suit shortness points".
По поводу большинства ещё раз подчеркну - Я НЕ ЗНАЮ. Статистики же нет кто что использует. Но поскольку надо с чем-то сравнить, то я выбрал их как наиболее часто встречающиеся в литературе.

Это сообщение отредактировал Тимец - 18/08/2016, 21:34
« Предыдущая тема | Перечень тем | Следующая тема »
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей: