// File: bonetblai[P]mdp-engine/ctp3/../engine/rollout.h
// Function: Online::Policy::Rollout::rollout_t<state_t>::operator()(state_t const&) const
virtual Problem::action_t operator()(const T &s) const {
        ++policy_t<T>::decisions_;
        Problem::action_t best_action = Problem::noop;
        float best_value = std::numeric_limits<float>::max();
        for( Problem::action_t a = 0; a < problem_.number_actions(s); ++a ) {
            if( problem_.applicable(s, a) ) {
                float value = 0;
                for( unsigned trial = 0; trial < width_; ++trial ) {
                    std::pair<T, bool> p = problem_.sample(s, a);
                    value += problem_.cost(s, a) + problem_.discount() * evaluate(p.first);
                }
                value /= width_;
                if( value < best_value ) {
                    best_value = value;
                    best_action = a;
                }
            }
        }
        assert(best_action != Problem::noop);
        return best_action;
    }

// Assembly:
subq $0xc8, %rsp
movq %rdi, 0xc0(%rsp)
movq %rsi, 0xb8(%rsp)
movq 0xc0(%rsp), %rax
movq %rax, 0x10(%rsp)
movl 0x20(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x20(%rax)
movl $0xffffffff, 0xb4(%rsp) # imm = 0xFFFFFFFF
callq 0x23160
movss %xmm0, 0xb0(%rsp)
movl $0x0, 0xac(%rsp)
movq 0x10(%rsp), %rax
movl 0xac(%rsp), %ecx
movl %ecx, 0xc(%rsp)
movq 0x8(%rax), %rdi
movq 0xb8(%rsp), %rsi
movq (%rdi), %rax
callq *0x10(%rax)
movl %eax, %ecx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jge 0x3bd95
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0xb8(%rsp), %rsi
movl 0xac(%rsp), %edx
movq (%rdi), %rax
callq *0x30(%rax)
testb $0x1, %al
jne 0x3bc18
jmp 0x3bd7d
xorps %xmm0, %xmm0
movss %xmm0, 0xa8(%rsp)
movl $0x0, 0xa4(%rsp)
movq 0x10(%rsp), %rcx
movl 0xa4(%rsp), %eax
cmpl 0x30(%rcx), %eax
jae 0x3bd21
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0xb8(%rsp), %rdx
movl 0xac(%rsp), %ecx
leaq 0x28(%rsp), %rdi
callq 0x19da0
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0xb8(%rsp), %rsi
movl 0xac(%rsp), %edx
movq (%rdi), %rax
movq 0x48(%rax), %rax
callq *%rax
movss %xmm0, 0x8(%rsp)
jmp 0x3bc8f
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x28980
movq 0x10(%rsp), %rdi
movss %xmm0, (%rsp)
leaq 0x28(%rsp), %rsi
callq 0x3c5b0
movss %xmm0, 0x4(%rsp)
jmp 0x3bcb9
movss 0x8(%rsp), %xmm0
movss 0x4(%rsp), %xmm2
movss (%rsp), %xmm1
mulss %xmm2, %xmm1
addss %xmm1, %xmm0
addss 0xa8(%rsp), %xmm0
movss %xmm0, 0xa8(%rsp)
leaq 0x28(%rsp), %rdi
callq 0x19f70
movl 0xa4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa4(%rsp)
jmp 0x3bc2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x20(%rsp)
movl %eax, 0x1c(%rsp)
leaq 0x28(%rsp), %rdi
callq 0x19f70
jmp 0x3bdcf
movq 0x10(%rsp), %rax
movl 0x30(%rax), %eax
cvtsi2ss %rax, %xmm1
movss 0xa8(%rsp), %xmm0
divss %xmm1, %xmm0
movss %xmm0, 0xa8(%rsp)
movss 0xa8(%rsp), %xmm1
movss 0xb0(%rsp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x3bd7b
movss 0xa8(%rsp), %xmm0
movss %xmm0, 0xb0(%rsp)
movl 0xac(%rsp), %eax
movl %eax, 0xb4(%rsp)
jmp 0x3bd7d
jmp 0x3bd7f
movl 0xac(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xac(%rsp)
jmp 0x3bbc1
cmpl $-0x1, 0xb4(%rsp)
je 0x3bda1
jmp 0x3bdc0
leaq 0x2243d(%rip), %rdi     # 0x5e1e5
leaq 0x22453(%rip), %rsi     # 0x5e202
movl $0x5b, %edx
leaq 0x2245b(%rip), %rcx     # 0x5e216
callq 0x6220
movl 0xb4(%rsp), %eax
addq $0xc8, %rsp
retq
movq 0x20(%rsp), %rdi
callq 0x6520
nopl (%rax)