Vikram Vasudevan commited on
Commit
a05ab27
·
1 Parent(s): caa5f7b

simulation issuefix

Browse files
data/run_history.json CHANGED
@@ -9178,5 +9178,332 @@
9178
  "events": 13.0
9179
  }
9180
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9181
  }
9182
  ]
 
9178
  "events": 13.0
9179
  }
9180
  ]
9181
+ },
9182
+ {
9183
+ "run_id": "29be1f27-1f77-4859-824d-a34132d49e82",
9184
+ "created_at_utc": "2026-04-25T10:46:59.869474+00:00",
9185
+ "config": {
9186
+ "seed": 42,
9187
+ "ticks": 200,
9188
+ "num_souls": 300,
9189
+ "resource_capacity": 10000.0,
9190
+ "resource_start": 6000.0,
9191
+ "resource_replenish_rate": 120.0,
9192
+ "baseline_consumption_need": 1.0,
9193
+ "starvation_health_penalty": 0.15,
9194
+ "wellbeing_from_surplus": 0.03,
9195
+ "event_rate": 0.05,
9196
+ "event_health_impact": 0.25,
9197
+ "event_wellbeing_impact": 0.35,
9198
+ "initial_moral_bias_mean": 0.0,
9199
+ "initial_moral_bias_std": 0.5,
9200
+ "rebirth_influence_strength": 0.25,
9201
+ "karma_decay_per_tick": 0.0,
9202
+ "min_max_age": 40,
9203
+ "max_max_age": 90
9204
+ },
9205
+ "final": {
9206
+ "time": 29.0,
9207
+ "alive": 300.0,
9208
+ "resource": 0.0,
9209
+ "mean_karma": -0.006362134396396482,
9210
+ "mean_wellbeing": 0.711920026653776,
9211
+ "mean_health": 0.6793042528392241,
9212
+ "events": 28.0,
9213
+ "collapsed": true
9214
+ },
9215
+ "ticks_recorded": 29,
9216
+ "series": [
9217
+ {
9218
+ "time": 1.0,
9219
+ "alive": 300.0,
9220
+ "resource": 5791.188655496856,
9221
+ "mean_karma": -1.0660819471840754e-05,
9222
+ "mean_wellbeing": 0.6603439090892494,
9223
+ "mean_health": 0.841907727389613,
9224
+ "events": 15.0,
9225
+ "collapsed": false
9226
+ },
9227
+ {
9228
+ "time": 2.0,
9229
+ "alive": 300.0,
9230
+ "resource": 5582.377310993712,
9231
+ "mean_karma": 3.666623602340065e-05,
9232
+ "mean_wellbeing": 0.6665780455533225,
9233
+ "mean_health": 0.8362134106866628,
9234
+ "events": 16.0,
9235
+ "collapsed": false
9236
+ },
9237
+ {
9238
+ "time": 3.0,
9239
+ "alive": 300.0,
9240
+ "resource": 5373.565966490568,
9241
+ "mean_karma": -0.00034860721773265994,
9242
+ "mean_wellbeing": 0.6698283487260045,
9243
+ "mean_health": 0.8328771126551923,
9244
+ "events": 15.0,
9245
+ "collapsed": false
9246
+ },
9247
+ {
9248
+ "time": 4.0,
9249
+ "alive": 300.0,
9250
+ "resource": 5164.754621987424,
9251
+ "mean_karma": -0.0003339761061109363,
9252
+ "mean_wellbeing": 0.6725829290711661,
9253
+ "mean_health": 0.8287896388061992,
9254
+ "events": 12.0,
9255
+ "collapsed": false
9256
+ },
9257
+ {
9258
+ "time": 5.0,
9259
+ "alive": 300.0,
9260
+ "resource": 4955.94327748428,
9261
+ "mean_karma": -0.0007726408605528319,
9262
+ "mean_wellbeing": 0.6759882710553117,
9263
+ "mean_health": 0.8222313321169236,
9264
+ "events": 8.0,
9265
+ "collapsed": false
9266
+ },
9267
+ {
9268
+ "time": 6.0,
9269
+ "alive": 300.0,
9270
+ "resource": 4747.131932981136,
9271
+ "mean_karma": -0.0009973001438300015,
9272
+ "mean_wellbeing": 0.6771794228166703,
9273
+ "mean_health": 0.8166483496301552,
9274
+ "events": 17.0,
9275
+ "collapsed": false
9276
+ },
9277
+ {
9278
+ "time": 7.0,
9279
+ "alive": 300.0,
9280
+ "resource": 4538.320588477992,
9281
+ "mean_karma": -0.0013264280083540366,
9282
+ "mean_wellbeing": 0.6803394212077227,
9283
+ "mean_health": 0.8123781679463153,
9284
+ "events": 16.0,
9285
+ "collapsed": false
9286
+ },
9287
+ {
9288
+ "time": 8.0,
9289
+ "alive": 300.0,
9290
+ "resource": 4329.509243974848,
9291
+ "mean_karma": -0.0014528866574526034,
9292
+ "mean_wellbeing": 0.6829509859127318,
9293
+ "mean_health": 0.8085009996889966,
9294
+ "events": 13.0,
9295
+ "collapsed": false
9296
+ },
9297
+ {
9298
+ "time": 9.0,
9299
+ "alive": 300.0,
9300
+ "resource": 4120.697899471704,
9301
+ "mean_karma": -0.0023374636299283037,
9302
+ "mean_wellbeing": 0.6839373786320584,
9303
+ "mean_health": 0.8010446552175488,
9304
+ "events": 13.0,
9305
+ "collapsed": false
9306
+ },
9307
+ {
9308
+ "time": 10.0,
9309
+ "alive": 300.0,
9310
+ "resource": 3911.886554968559,
9311
+ "mean_karma": -0.0026339939563279832,
9312
+ "mean_wellbeing": 0.6859504976030479,
9313
+ "mean_health": 0.7943872068872709,
9314
+ "events": 18.0,
9315
+ "collapsed": false
9316
+ },
9317
+ {
9318
+ "time": 11.0,
9319
+ "alive": 300.0,
9320
+ "resource": 3703.0752104654134,
9321
+ "mean_karma": -0.003031045685071522,
9322
+ "mean_wellbeing": 0.6889355600740757,
9323
+ "mean_health": 0.789281334333398,
9324
+ "events": 13.0,
9325
+ "collapsed": false
9326
+ },
9327
+ {
9328
+ "time": 12.0,
9329
+ "alive": 300.0,
9330
+ "resource": 3494.263865962268,
9331
+ "mean_karma": -0.0033396888402743552,
9332
+ "mean_wellbeing": 0.6906475464311808,
9333
+ "mean_health": 0.7850204076397309,
9334
+ "events": 12.0,
9335
+ "collapsed": false
9336
+ },
9337
+ {
9338
+ "time": 13.0,
9339
+ "alive": 300.0,
9340
+ "resource": 3285.4525214591226,
9341
+ "mean_karma": -0.002948420621339535,
9342
+ "mean_wellbeing": 0.6951131960675339,
9343
+ "mean_health": 0.7807504622765574,
9344
+ "events": 21.0,
9345
+ "collapsed": false
9346
+ },
9347
+ {
9348
+ "time": 14.0,
9349
+ "alive": 300.0,
9350
+ "resource": 3076.6411769559772,
9351
+ "mean_karma": -0.002874053200717689,
9352
+ "mean_wellbeing": 0.6986440871606325,
9353
+ "mean_health": 0.7774920266070056,
9354
+ "events": 14.0,
9355
+ "collapsed": false
9356
+ },
9357
+ {
9358
+ "time": 15.0,
9359
+ "alive": 300.0,
9360
+ "resource": 2867.829832452832,
9361
+ "mean_karma": -0.002812884383409349,
9362
+ "mean_wellbeing": 0.7015300135249318,
9363
+ "mean_health": 0.7729953947451893,
9364
+ "events": 9.0,
9365
+ "collapsed": false
9366
+ },
9367
+ {
9368
+ "time": 16.0,
9369
+ "alive": 300.0,
9370
+ "resource": 2659.0184879496865,
9371
+ "mean_karma": -0.003059587781595461,
9372
+ "mean_wellbeing": 0.702486906239951,
9373
+ "mean_health": 0.7682433161777408,
9374
+ "events": 20.0,
9375
+ "collapsed": false
9376
+ },
9377
+ {
9378
+ "time": 17.0,
9379
+ "alive": 300.0,
9380
+ "resource": 2450.207143446541,
9381
+ "mean_karma": -0.0037996612396219423,
9382
+ "mean_wellbeing": 0.7017381492099677,
9383
+ "mean_health": 0.7607332955908543,
9384
+ "events": 11.0,
9385
+ "collapsed": false
9386
+ },
9387
+ {
9388
+ "time": 18.0,
9389
+ "alive": 300.0,
9390
+ "resource": 2241.3957989433957,
9391
+ "mean_karma": -0.0040575614238893415,
9392
+ "mean_wellbeing": 0.7042462709988168,
9393
+ "mean_health": 0.754911808064549,
9394
+ "events": 23.0,
9395
+ "collapsed": false
9396
+ },
9397
+ {
9398
+ "time": 19.0,
9399
+ "alive": 300.0,
9400
+ "resource": 2032.5844544402496,
9401
+ "mean_karma": -0.0047270745323893726,
9402
+ "mean_wellbeing": 0.7037826883204681,
9403
+ "mean_health": 0.7503618053894324,
9404
+ "events": 13.0,
9405
+ "collapsed": false
9406
+ },
9407
+ {
9408
+ "time": 20.0,
9409
+ "alive": 300.0,
9410
+ "resource": 1823.7731099371033,
9411
+ "mean_karma": -0.005039481058183492,
9412
+ "mean_wellbeing": 0.7043769365760746,
9413
+ "mean_health": 0.7429657999269089,
9414
+ "events": 16.0,
9415
+ "collapsed": false
9416
+ },
9417
+ {
9418
+ "time": 21.0,
9419
+ "alive": 300.0,
9420
+ "resource": 1614.961765433956,
9421
+ "mean_karma": -0.005315973517100889,
9422
+ "mean_wellbeing": 0.708174696733242,
9423
+ "mean_health": 0.7374270592705253,
9424
+ "events": 16.0,
9425
+ "collapsed": false
9426
+ },
9427
+ {
9428
+ "time": 22.0,
9429
+ "alive": 300.0,
9430
+ "resource": 1406.1504209308089,
9431
+ "mean_karma": -0.005269720400965907,
9432
+ "mean_wellbeing": 0.7167430308822857,
9433
+ "mean_health": 0.7360912732883659,
9434
+ "events": 18.0,
9435
+ "collapsed": false
9436
+ },
9437
+ {
9438
+ "time": 23.0,
9439
+ "alive": 300.0,
9440
+ "resource": 1197.4121192241125,
9441
+ "mean_karma": -0.00563110660260085,
9442
+ "mean_wellbeing": 0.7150258340295761,
9443
+ "mean_health": 0.7317714285088164,
9444
+ "events": 15.0,
9445
+ "collapsed": false
9446
+ },
9447
+ {
9448
+ "time": 24.0,
9449
+ "alive": 300.0,
9450
+ "resource": 988.8995493119382,
9451
+ "mean_karma": -0.005842102792165956,
9452
+ "mean_wellbeing": 0.7141575409473815,
9453
+ "mean_health": 0.7278652675784323,
9454
+ "events": 11.0,
9455
+ "collapsed": false
9456
+ },
9457
+ {
9458
+ "time": 25.0,
9459
+ "alive": 300.0,
9460
+ "resource": 780.5777437021876,
9461
+ "mean_karma": -0.0051941831264151845,
9462
+ "mean_wellbeing": 0.7196872136040257,
9463
+ "mean_health": 0.7252263592039147,
9464
+ "events": 15.0,
9465
+ "collapsed": false
9466
+ },
9467
+ {
9468
+ "time": 26.0,
9469
+ "alive": 300.0,
9470
+ "resource": 572.1805709136289,
9471
+ "mean_karma": -0.005466315180878296,
9472
+ "mean_wellbeing": 0.7188966062416869,
9473
+ "mean_health": 0.7216678215589614,
9474
+ "events": 16.0,
9475
+ "collapsed": false
9476
+ },
9477
+ {
9478
+ "time": 27.0,
9479
+ "alive": 300.0,
9480
+ "resource": 363.78339812507005,
9481
+ "mean_karma": -0.005867464696898862,
9482
+ "mean_wellbeing": 0.7197153676157635,
9483
+ "mean_health": 0.7160454084309805,
9484
+ "events": 20.0,
9485
+ "collapsed": false
9486
+ },
9487
+ {
9488
+ "time": 28.0,
9489
+ "alive": 300.0,
9490
+ "resource": 155.5766014076738,
9491
+ "mean_karma": -0.006128349718719009,
9492
+ "mean_wellbeing": 0.7189204506416692,
9493
+ "mean_health": 0.7094550844647237,
9494
+ "events": 10.0,
9495
+ "collapsed": false
9496
+ },
9497
+ {
9498
+ "time": 29.0,
9499
+ "alive": 300.0,
9500
+ "resource": 0.0,
9501
+ "mean_karma": -0.006362134396396482,
9502
+ "mean_wellbeing": 0.711920026653776,
9503
+ "mean_health": 0.6793042528392241,
9504
+ "events": 28.0,
9505
+ "collapsed": true
9506
+ }
9507
+ ]
9508
  }
9509
  ]
src/god_sim/analytics/history.py CHANGED
@@ -9,15 +9,25 @@ import numpy as np
9
 
10
  class SimulationEncoder(json.JSONEncoder):
11
  def default(self, obj):
12
- if isinstance(obj, np.integer):
13
  return int(obj)
14
- if isinstance(obj, np.floating):
15
  return float(obj)
16
- if isinstance(obj, np.ndarray):
17
- return obj.tolist()
 
 
 
 
18
  if isinstance(obj, (datetime, Path)):
19
  return str(obj)
20
- return super().default(obj)
 
 
 
 
 
 
21
 
22
  DEFAULT_HISTORY_PATH = Path("data/run_history.json")
23
 
 
9
 
10
  class SimulationEncoder(json.JSONEncoder):
11
  def default(self, obj):
12
+ if isinstance(obj, (np.integer, np.int64, np.int32, np.int16, np.int8)):
13
  return int(obj)
14
+ if isinstance(obj, (np.floating, np.float64, np.float32, np.float16)):
15
  return float(obj)
16
+ if isinstance(obj, (np.ndarray, np.generic)):
17
+ if isinstance(obj, np.bool_):
18
+ return bool(obj)
19
+ if hasattr(obj, "tolist"):
20
+ return obj.tolist()
21
+ return str(obj)
22
  if isinstance(obj, (datetime, Path)):
23
  return str(obj)
24
+ try:
25
+ return super().default(obj)
26
+ except TypeError:
27
+ try:
28
+ return str(obj)
29
+ except Exception:
30
+ raise
31
 
32
  DEFAULT_HISTORY_PATH = Path("data/run_history.json")
33