A supplied decision model: changing payoff changes the selected evidence bound
Supplied research · Reviewed findings · 30 October 2026
Incoprea Research · Supplied findings · 30 October 2026
Evidence status: Reproduced model consistency result; no test of human adaptation or subjective confidence.
In a supplied drift-diffusion simulation, the evidence bound with the highest estimated reward rate changes when waiting time or error cost changes. That is a reproducible illustration of an established decision-theory mechanism. It does not establish that human subjects adjust their bounds, because the code contains no subjects and no learned adaptation rule.
The claim and the model
Confidence Costs Time proposes that the same subject shifts along a speed–accuracy frontier when payoff changes. The supplied experiment instead simulates outcomes at a fixed set of bounds and selects the best scoring bound afterward. It can check normative consistency: different objectives can favor different operating points. The behavioral prediction remains untested.
The supplied code uses positive drift 0.45, noise scale 1 and symmetric absorbing bounds ±a. Evidence begins at zero. An Euler simulation advances in steps of 0.002 seconds until a boundary is crossed or a 3.5-second deadline is reached. There are 17 bounds from 0.20 to 1.80, with 4,000 trials per bound: 68,000 simulated trials altogether.
A positive boundary crossing counts as correct; a negative crossing is incorrect. Every timeout is scored as an error and consumes the full deadline. Thus “accuracy” here is correct crossings divided by all trials, not accuracy conditional on a completed decision. Large bounds can have lower reported accuracy because more trials time out.
Changing the time between trials
For each supplied bound, reward rate is estimated as accuracy divided by mean decision time plus the inter-trial interval. The same simulated performance curve is reused for five intervals. No new simulated subject changes behavior when the interval changes; the publisher computes which already-simulated bound maximizes the new objective.
| Inter-trial interval | Selected bound on grid | Correct fraction | Mean decision time |
|---|---|---|---|
| 0.1 s | 0.20 | 54.925% | 0.05243 s |
| 0.3 s | 0.20 | 54.925% | 0.05243 s |
| 0.8 s | 0.20 | 54.925% | 0.05243 s |
| 2.0 s | 0.40 | 60.3% | 0.17841 s |
| 5.0 s | 0.70 | 65.9% | 0.51258 s |
The numerical intuition is straightforward. When another trial arrives cheaply, a fast imperfect answer can accumulate reward quickly. When every trial carries a long interval, spending longer to improve the chance of a correct response can be worthwhile. The selected low-delay bound is also the lower edge of the grid, so the computation does not identify the continuous optimum in that case.
Adding an error penalty
A second supplied calculation uses [accuracy−p(1−accuracy)]/(mean decision time+1 second), where p is the error penalty and timeouts again count as errors. The selected bound is 0.40 at penalty 0.25, 0.50 at penalty 0.50, and 0.90 at penalty 1.0. This is another change in the scoring objective applied to the same simulated curve, not a separate dataset.
Why “selected bound” is more accurate than “proven optimum”
Every estimated accuracy and mean time contains Monte Carlo noise. The source does not provide uncertainty intervals for the maximizers. Some competitors are very close: at a 2-second interval, estimated reward rates are 0.276808 for bound 0.40 and 0.276752 for bound 0.50. Such a small gap cannot establish that 0.40 is uniquely optimal.
The 0.1 bound spacing, finite time step, boundary-crossing overshoot and one drift/noise setting also limit precision. Exact choices such as 0.70 should be reported as maximizers of the supplied finite, noisy grid, not universal physiological parameters. No subjective confidence is measured; boundary-crossing accuracy is the modeled quantity.
Established context
Bogacz, Brown, Moehlis, Holmes and Cohen’s primary 2006 analysis develops the established relationship between evidence accumulation, reward criteria and speed–accuracy trade-offs. The supplied simulation is consistent with that framework. It adds a reproducible notebook illustration, not a new theory or independent confirmation that people optimize reward rate. A behavioral test would need observed choices and response times under defined payoff conditions.
Provenance and reproducibility
The supplied Incoprea Hypothesis Tests package attributes its analysis, code and original drafting to DeepSeek Harness. Codex audited the supplied implementation, reproduced the unchanged code and recorded seed in an isolated copy, and prepared this corrected publication text. The regenerated result file was byte-identical to the supplied file. This is reproduction of the supplied computation, not a new experiment or independent empirical confirmation. No external peer review or scientific novelty is claimed. The original hypotheses remain unchanged at Incoprea Research.
Inspect and reproduce the supplied result
Python 3 and NumPy (the reproduction review used NumPy 2.5.4). The script creates a results folder beside itself. Save the code as reproduce.py in a fresh folder and run python3 reproduce.py. The code writes its results in that folder. This is a consistency reproduction of an already-supplied study; no new experiment was designed for this publication.
Show the complete runnable reproduction
# Publisher packaging adaptation: output folder is adjacent to this script; unused import removed where applicable.
# Simulation, numerical parameters and random seed are unchanged from the supplied code.
"""V20 #2 'Confidence Costs Time': does the reward rate set the speed/accuracy operating point?"""
import json, os
import numpy as np
ROOT=os.path.dirname(os.path.abspath(__file__))
os.makedirs(os.path.join(ROOT,"results"),exist_ok=True)
rng=np.random.default_rng(20261030)
dt=0.002; Tmax=3.5; SIG=1.0; V=0.45; NTRIALS=4000
BOUNDS=np.round(np.arange(0.2,1.85,0.1),2)
def simulate(a):
x=np.zeros(NTRIALS); rt=np.full(NTRIALS,Tmax); correct=np.zeros(NTRIALS,bool); done=np.zeros(NTRIALS,bool)
for t in range(int(Tmax/dt)):
active=~done
if not active.any(): break
x[active]+=V*dt+SIG*np.sqrt(dt)*rng.normal(size=active.sum())
hit=(np.abs(x)>=a)&active
rt[hit]=(t+1)*dt; correct[hit]=x[hit]>0; done|=hit
return done,correct,rt
rows=[]
for a in BOUNDS:
done,correct,rt=simulate(a)
rows.append({'bound':float(a),'accuracy':float(correct.mean()),'mean_rt':float(rt.mean()),
'timeout':float(1-done.mean())})
print(f"a={a:.2f} acc={correct.mean():.3f} rt={rt.mean():.3f} timeout={(1-done.mean()):.4f}",flush=True)
out={'design':{'drift':V,'sigma':SIG,'dt':dt,'trials':NTRIALS,'bounds':BOUNDS.tolist(),
'note':'timeouts scored as errors at Tmax'},'curve':rows,'iti':{},'penalty':{}}
for iti in [0.1,0.3,0.8,2.0,5.0]:
rr=[r['accuracy']/(r['mean_rt']+iti) for r in rows]
i=int(np.argmax(rr))
out['iti'][str(iti)]={'best_bound':rows[i]['bound'],'reward_rate':float(rr[i]),
'accuracy':rows[i]['accuracy'],'mean_rt':rows[i]['mean_rt']}
print(f"ITI={iti}: best bound={rows[i]['bound']:.2f} acc={rows[i]['accuracy']:.3f} rt={rows[i]['mean_rt']:.3f}",flush=True)
for pen in [0.25,0.5,1.0]:
rr=[(r['accuracy']-pen*(1-r['accuracy']))/(r['mean_rt']+1.0) for r in rows]
i=int(np.argmax(rr))
out['penalty'][str(pen)]={'best_bound':rows[i]['bound'],'accuracy':rows[i]['accuracy'],
'mean_rt':rows[i]['mean_rt'],'rate':float(rr[i])}
print(f"error penalty={pen}: best bound={rows[i]['bound']:.2f} acc={rows[i]['accuracy']:.3f}",flush=True)
json.dump(out,open(os.path.join(ROOT,'results','ddm.json'),'w'),indent=2)
Show the published numerical results
{
"design": {
"drift": 0.45,
"sigma": 1.0,
"dt": 0.002,
"trials": 4000,
"bounds": [
0.2,
0.3,
0.4,
0.5,
0.6,
0.7,
0.8,
0.9,
1.0,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8
],
"note": "timeouts scored as errors at Tmax"
},
"curve": [
{
"bound": 0.2,
"accuracy": 0.54925,
"mean_rt": 0.05243050000000001,
"timeout": 0.0
},
{
"bound": 0.3,
"accuracy": 0.56975,
"mean_rt": 0.1061575,
"timeout": 0.0
},
{
"bound": 0.4,
"accuracy": 0.603,
"mean_rt": 0.1784055,
"timeout": 0.0
},
{
"bound": 0.5,
"accuracy": 0.62825,
"mean_rt": 0.270082,
"timeout": 0.0
},
{
"bound": 0.6,
"accuracy": 0.64225,
"mean_rt": 0.387942,
"timeout": 0.0
},
{
"bound": 0.7,
"accuracy": 0.659,
"mean_rt": 0.512577,
"timeout": 0.00024999999999997247
},
{
"bound": 0.8,
"accuracy": 0.67325,
"mean_rt": 0.6655915,
"timeout": 0.0012499999999999734
},
{
"bound": 0.9,
"accuracy": 0.695,
"mean_rt": 0.8212240000000002,
"timeout": 0.006249999999999978
},
{
"bound": 1.0,
"accuracy": 0.70275,
"mean_rt": 0.9735985,
"timeout": 0.012750000000000039
},
{
"bound": 1.1,
"accuracy": 0.6995,
"mean_rt": 1.132172,
"timeout": 0.031000000000000028
},
{
"bound": 1.2,
"accuracy": 0.7155,
"mean_rt": 1.3074345,
"timeout": 0.053749999999999964
},
{
"bound": 1.3,
"accuracy": 0.71675,
"mean_rt": 1.4701595,
"timeout": 0.07825000000000004
},
{
"bound": 1.4,
"accuracy": 0.69025,
"mean_rt": 1.6266444999999998,
"timeout": 0.11450000000000005
},
{
"bound": 1.5,
"accuracy": 0.69,
"mean_rt": 1.7936534999999998,
"timeout": 0.14700000000000002
},
{
"bound": 1.6,
"accuracy": 0.65325,
"mean_rt": 1.9351655,
"timeout": 0.1895
},
{
"bound": 1.7,
"accuracy": 0.64425,
"mean_rt": 2.0853845,
"timeout": 0.21850000000000003
},
{
"bound": 1.8,
"accuracy": 0.613,
"mean_rt": 2.178202,
"timeout": 0.26275000000000004
}
],
"iti": {
"0.1": {
"best_bound": 0.2,
"reward_rate": 3.603281495501228,
"accuracy": 0.54925,
"mean_rt": 0.05243050000000001
},
"0.3": {
"best_bound": 0.2,
"reward_rate": 1.558463299856284,
"accuracy": 0.54925,
"mean_rt": 0.05243050000000001
},
"0.8": {
"best_bound": 0.2,
"reward_rate": 0.6443340542132173,
"accuracy": 0.54925,
"mean_rt": 0.05243050000000001
},
"2.0": {
"best_bound": 0.4,
"reward_rate": 0.27680796802982727,
"accuracy": 0.603,
"mean_rt": 0.1784055
},
"5.0": {
"best_bound": 0.7,
"reward_rate": 0.11954481542842849,
"accuracy": 0.659,
"mean_rt": 0.512577
}
},
"penalty": {
"0.25": {
"best_bound": 0.4,
"accuracy": 0.603,
"mean_rt": 0.1784055,
"rate": 0.42748442704994155
},
"0.5": {
"best_bound": 0.5,
"accuracy": 0.62825,
"mean_rt": 0.270082,
"rate": 0.34830428271560415
},
"1.0": {
"best_bound": 0.9,
"accuracy": 0.695,
"mean_rt": 0.8212240000000002,
"rate": 0.21414169811072106
}
}
}Show source provenance and review boundaries
{
"source_package": "Incoprea Hypothesis Tests - 2026-10-30",
"source_relative_code": "code/test_ddm.py",
"original_code_sha256": "762dbb0f08c52ecd9f2dc033a327f7b670da3e12e24c12714966dc886d0abb4f",
"source_result_sha256": "283c6a851293f7f2c9f900470cae0239847e4a9109262f09c73c9fe6e5aa1168",
"reproduction": "Unchanged supplied code reproduced byte-identical JSON in isolated review copy",
"publication_adaptation": "Output path only; removes unused lib import for bandit. No simulation/algorithm changes.",
"runtime": "Review used Python 3.14 and NumPy 2.5.4",
"classification": "Supplied synthetic model, not observed human or deployed-system behavior"
}Supplied analysis, code and initial drafting: DeepSeek Harness, as identified in the source package. Consistency review, reproduction and corrected publication text: Codex. Internal computational review is not external peer review. Incoprea Research · Original posted question or hypothesis.
Published reproduction SHA-256: 299191a8ef20d5b0db96837b567f4caff5ce8730ac6d7a174c655c1750e9f754
Published result SHA-256: 283c6a851293f7f2c9f900470cae0239847e4a9109262f09c73c9fe6e5aa1168
Comments
Post a Comment