@@ -31,6 +31,7 @@ partial class IPDDomain : AbstractDomainView
31
31
private ToolStripMenuItem _history ;
32
32
private ToolStripMenuItem _save ;
33
33
private DataGridViewColumn _cumulative ;
34
+ private DataGridViewColumn _wins ;
34
35
private DataGridViewColumn _rankings ;
35
36
36
37
private ZedGraphControl _graphArchive ;
@@ -219,9 +220,16 @@ private void CreateArchiveGraph()
219
220
g . XAxis . Title . Text = "Archive Index" ;
220
221
g . YAxis . Title . Text = "Score" ;
221
222
223
+ g . Y2AxisList . Add ( "Rank" ) ;
224
+ g . Y2AxisList [ 1 ] . IsVisible = false ;
225
+ g . Y2AxisList [ 1 ] . Scale . Min = 0.0 ;
226
+ g . Y2AxisList [ 1 ] . Scale . Max = _info . OpponentPool . Length ;
227
+
222
228
g . Y2Axis . IsVisible = true ;
229
+ g . Y2Axis . Title . Text = "Wins" ;
223
230
g . Y2Axis . Scale . Min = 0.0 ;
224
- g . Y2Axis . Scale . Max = 1.0 ;
231
+ g . Y2Axis . Scale . Max = _info . OpponentPool . Length ;
232
+
225
233
226
234
Controls . Add ( _graphArchive ) ;
227
235
}
@@ -236,36 +244,25 @@ private void UpdateArchiveGraph()
236
244
237
245
double [ ] ii = new double [ archive . Count ] ;
238
246
double [ ] score = new double [ archive . Count ] ;
239
- double [ ] rank = new double [ archive . Count ] ;
247
+ double [ ] averageWins = new double [ archive . Count ] ;
240
248
double [ ] averageRank = new double [ archive . Count ] ;
241
- PointPairList averageWinningScore = new PointPairList ( ) ;
242
- PointPairList winningScores = new PointPairList ( ) ;
243
- PointPairList topScore = new PointPairList ( ) ;
244
-
245
- double averageRankCounter = 0 ;
246
- double averageWinningScoreCounter = 0 ;
247
- //double topScoreCounter = -1;
248
- int first = - 1 ;
249
+ PointPairList gold = new PointPairList ( ) ;
250
+
251
+ double avgW = 0 ;
252
+ double avgR = 0 ;
249
253
for ( int i = 0 ; i < ii . Length ; i ++ )
250
254
{
251
255
ii [ i ] = i ;
252
256
score [ i ] = archive [ i ] . Score ;
253
- rank [ i ] = archive [ i ] . Rank ;
254
257
255
- averageRankCounter += rank [ i ] ;
256
- averageRank [ i ] = averageRankCounter / ( i + 1 ) ;
257
- //topScoreCounter = (score[i] > topScoreCounter) ? score[i] : topScoreCounter;
258
- //topScore.Add(new PointPair(i, topScoreCounter));
258
+ avgR += archive [ i ] . Rank ;
259
+ averageRank [ i ] = avgR / ( i + 1 ) ;
259
260
260
- if ( rank [ i ] == 1.0 )
261
- {
262
- if ( first == - 1 )
263
- first = i ;
261
+ avgW += archive [ i ] . Wins ; //==avgR when single opponent
262
+ averageWins [ i ] = avgW / ( i + 1 ) ;
264
263
265
- averageWinningScoreCounter += score [ i ] ; //average score, only counting those with rank 1
266
- averageWinningScore . Add ( new PointPair ( i , averageWinningScoreCounter / ( averageWinningScore . Count + 1 ) ) ) ;
267
-
268
- }
264
+ if ( archive [ i ] . Wins == _info . OpponentPool . Length && archive [ i ] . Rank == 1.0 )
265
+ gold . Add ( new PointPair ( i , score [ i ] ) ) ;
269
266
}
270
267
271
268
Color [ ] greyscale = new Color [ 4 ]
@@ -275,41 +272,25 @@ private void UpdateArchiveGraph()
275
272
Color . FromArgb ( 60 , 60 , 60 ) ,
276
273
Color . FromArgb ( 0 , 0 , 0 ) //darkest
277
274
} ;
278
-
279
- //var f = g.AddCurve("First hit", new PointPairList() { new PointPair(first, 1.0d) }, Color.White, SymbolType.Triangle);
280
- //f.IsY2Axis = true;
281
- //f.Symbol.Size = 20;
282
- //f.Symbol.Fill = new Fill(Brushes.Green);
283
275
284
- var ar = g . AddCurve ( "Average Rank" , ii , averageRank , greyscale [ 3 ] , SymbolType . None ) ;
276
+ var gp = g . AddCurve ( "Optimal Behavior" , gold , greyscale [ 3 ] , SymbolType . Diamond ) ;
277
+ gp . Line . IsVisible = false ;
278
+ gp . Symbol . Size = 6 ;
279
+ gp . Symbol . Fill = new Fill ( greyscale [ 3 ] ) ;
280
+
281
+ var ar = g . AddCurve ( "Average Rank" , ii , averageRank , greyscale [ 2 ] , SymbolType . None ) ;
285
282
ar . IsY2Axis = true ;
283
+ ar . YAxisIndex = 1 ;
286
284
ar . Line . Width = 3 ;
287
285
288
- var @as = g . AddCurve ( "Average Winning Score" , averageWinningScore , greyscale [ 2 ] , SymbolType . Star ) ;
289
- @as . Line . Width = 0 ;
290
- @as . Line . IsVisible = false ;
291
- @as . Symbol . Size = 2 ;
292
- @as . Symbol . Fill = new Fill ( greyscale [ 2 ] ) ;
293
-
294
- //var ws = g.AddCurve("Winning Behavior", winningScores, greyscale[2], SymbolType.Star);
295
- //ws.Line.Width = 0;
296
- //ws.Line.IsVisible = false;
297
- //ws.Symbol.Size = 3;
298
- //ws.Symbol.Fill = new Fill(greyscale[2]);
299
-
300
- //var t = g.AddCurve("Top Score", topScore, greyscale[0], SymbolType.None);
301
- //t.Line.Width = 2;
286
+ var aw = g . AddCurve ( "Average Wins" , ii , averageWins , greyscale [ 0 ] , SymbolType . None ) ;
287
+ aw . IsY2Axis = true ;
288
+ aw . Line . Width = 3 ;
302
289
303
290
var s = g . AddCurve ( "Behavior" , ii , score , greyscale [ 1 ] , SymbolType . HDash ) ;
304
291
s . Line . IsVisible = false ;
305
292
s . Symbol . Size = 3 ;
306
-
307
- //var r = g.AddCurve("Ranking", ii, rank, Color.Coral, SymbolType.Diamond);
308
- //r.IsY2Axis = true;
309
- //r.Symbol.Fill = new Fill(Brushes.Coral);
310
- //r.Symbol.Size = 3;
311
- //r.Line.IsVisible = false;
312
-
293
+
313
294
_graphArchive . AxisChange ( ) ;
314
295
}
315
296
@@ -351,13 +332,19 @@ private void CreateTable()
351
332
}
352
333
_table . Rows . AddRange ( rows ) ;
353
334
354
- //Cumulative and Ranking columns
335
+ //Cumulative, Wins and Ranking columns
355
336
_cumulative = new DataGridViewTextBoxColumn ( ) ;
356
337
_cumulative . HeaderText = "Cumulative Score" ;
357
338
_cumulative . AutoSizeMode = DataGridViewAutoSizeColumnMode . ColumnHeader ;
358
339
_cumulative . SortMode = DataGridViewColumnSortMode . NotSortable ;
359
340
_table . Columns . Add ( _cumulative ) ;
360
341
342
+ _wins = new DataGridViewTextBoxColumn ( ) ;
343
+ _wins . HeaderText = "Total Wins" ;
344
+ _wins . AutoSizeMode = DataGridViewAutoSizeColumnMode . ColumnHeader ;
345
+ _wins . SortMode = DataGridViewColumnSortMode . NotSortable ;
346
+ _table . Columns . Add ( _wins ) ;
347
+
361
348
_rankings = new DataGridViewTextBoxColumn ( ) ;
362
349
_rankings . HeaderText = "Ranking" ;
363
350
_rankings . AutoSizeMode = DataGridViewAutoSizeColumnMode . AllCells ;
@@ -374,6 +361,7 @@ private void UpdateTable()
374
361
375
362
//Fill in table
376
363
double [ ] totals = new double [ _players . Length ] ;
364
+ double [ ] wins = new double [ _players . Length ] ;
377
365
for ( int i = 0 ; i < _players . Length ; i ++ )
378
366
for ( int j = i + 1 ; j < _players . Length ; j ++ )
379
367
if ( i != j )
@@ -391,6 +379,13 @@ private void UpdateTable()
391
379
392
380
totals [ i ] += iScore ;
393
381
totals [ j ] += jScore ;
382
+
383
+ if ( iScore == jScore )
384
+ {
385
+ wins [ i ] += 0.5 ;
386
+ wins [ j ] += 0.5 ;
387
+ }
388
+ else wins [ ( iScore > jScore ) ? i : j ] ++ ;
394
389
}
395
390
396
391
//Calculate cumulative column
@@ -399,7 +394,14 @@ private void UpdateTable()
399
394
_table . Rows [ i ] . Cells [ _cumulative . DisplayIndex ] . Value = totals [ i ] ;
400
395
_table . Rows [ i ] . Cells [ _cumulative . DisplayIndex ] . ToolTipText = _players [ i ] . Name + "'s total score" ;
401
396
}
402
-
397
+
398
+ //Calculate wins
399
+ for ( int i = 0 ; i < _players . Length ; i ++ )
400
+ {
401
+ _table . Rows [ i ] . Cells [ _wins . DisplayIndex ] . Value = wins [ i ] ;
402
+ _table . Rows [ i ] . Cells [ _cumulative . DisplayIndex ] . ToolTipText = _players [ i ] . Name + "'s total wins" ;
403
+ }
404
+
403
405
//Calculate rankings column
404
406
var ranks = totals . Rank ( ) ;
405
407
for ( int i = 0 ; i < _players . Length ; i ++ )
0 commit comments