The Volunteer's Dilemma
- A Computer Tournament -
Strategies' Program Parts
Overview
- "Gewissensbisse" by P. Ackermann (strategy's definition)
- "All D" by J. Arpagaus (strategy's definition)
- "GOLD: Group Accumulation Leads to Defection" by S. Auer (strategy's definition)
- "Taking Turns" by R. Bekkers (strategy's definition)
- "Gentle Temporiser" by R. Berger (strategy's definition)
- "Lazy but Fair" by F. Braun (strategy's definition)
- "Lazy Hero" by M. Braun (strategy's definition)
- "Rely on Group Pressure" by N. Braun (strategy's definition)
- "Finally Heroe" by J. Brüderl (strategy's definition)
- "Reciprocating Volunteer" by V. Buskens (strategy's definition)
- "Minka" by J. Deuschle (strategy's definition)
- "Superrational Strategy" by A. Diekmann (strategy's definition)
- "Hope" by H. Esser (strategy's definition)
- "Cooperate Unexploitably" by M. Franosch (strategy's definition)
- "Sponger" by T. Gautschi (strategy's definition)
- "Rarified Cooperation" by E. Gehmacher (strategy's definition)
- "2gather" by C. Hausen & K. Pforr (strategy's definition)
- "Kopposite" by C. Kopp (strategy's definition)
- "Mercy Coop" by P. Kriwy (strategy's definition)
- "Eve" by E. & N. Lepperhoff (strategy's definition)
- "Casual Hero" by U. Liebe (strategy's definition)
- "More Actors, Less Cooperation" by P. Preisendörfer (strategy's definition)
- "Sizewatcher" by B. Prosch (strategy's definition)
- "Tit for Tat Invers" by C. Schatz (strategy's definition)
- "Rent-Sharing Cooperation" by K.-U. Schnapp (strategy's definition)
- "Just Distribution" by H. Scholtz (strategy's definition)
- "Candle++" by T. Varga (strategy's definition)
- "Toggle" by M. Vieth (strategy's definition)
- "Pawlow" by T. Voss (strategy's definition)
1: "Gewissensbisse" by P. Ackermann
Program Code:
(strategy's definition)
private int Strategy_sim0(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 0"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
int choice = c_probability(1.0 / strategies);
this.last_c = (choice > 0) ? 0 : 1; // counting the periods after the last own C-choice
return choice;
} else { // in t>1
if (sum_choices(simu_results[period - 1]) < 2) { // 0 or 1 C in t-1
int choice = c_probability(Math.pow((this.last_c * 1.0) / strategies, 2));
this.last_c = (choice > 0) ? 0 : Math.min(this.last_c + 1, strategies);
return choice;
} else { // more than one C in t-1
this.last_c = Math.min(this.last_c + 1, strategies);
return 0;
}
}
}
back to overview
2: "All D" by J. Arpagaus
Program Code:
(strategy's definition)
private int Strategy_sim1(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 1"); }
return 0;
}
back to overview
5: "Gentle Temporiser" by R. Berger
Program Code:
(strategy's definition)
private int Strategy_sim2(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 2"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period < 3) { // in t<=3 (in the first three periods)
return 0;
} else { // in t>3
if (simu_results[period - 1][own_idx] == 0) { // own choice was D in t-1
if (((period + 1) % 3) == 0) { // for all periods divisible by 3
for (int p = 1; p <= 3; p++) {
if (sum_choices(simu_results[period - p]) > 0) { // at least one C in at least one of the last three periods
return 0;
}
}
return 1; // if no C in the last three periods AAA
} else { // not three periods later
return 0;
}
} else { // own choice was C in t-1
if (((period + 1) % 3) == 0) { // for all periods divisible by 3
int other_cp = 0; // correction from here: AAA
for (int p = 1; p <= 3; p++) {
if ((sum_choices(simu_results[period - p]) - 1) > 0) { // at least one C by others in t=t-p
other_cp++;
}
}
if (other_cp >= 3) { // at least one C by others in each of the last three periods
return 0;
} else { // not in each of the last three periods at least one C by others
return 1;
}
} else { // not three periods later
return 1;
}
}
}
}
back to overview
6: "Lazy but Fair" by F. Braun
Program Code:
(strategy's definition)
private int Strategy_sim3(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 3"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (((period + 1) % strategies) == 0) { // for all periods divisible by N
return 1;
} else { // for all periods not divisible by N
return 0;
}
}
back to overview
7: "Lazy Hero" by M. Braun
Program Code:
(strategy's definition)
private int Strategy_sim4(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 4"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
return c_probability(1.0 / (strategies - 1)); // C with p=1/(N-1)
} else { // in t>1
double prob = (1.0 / (strategies - 1)) - ((sum_choices(simu_results[period - 1]) - 1.0) / strategies);
if (prob > 0.0) {
return c_probability(prob); // C with computed probability
} else { // for prob<=0
return 0;
}
}
}
back to overview
8: "Rely on Group Pressure" by N. Braun
Program Code:
(strategy's definition)
private int Strategy_sim5(int period, int simu_results[][], int own_idx) {//if (g_debug_flg) { debug_win.document.writeln("Strategy 5"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
return c_probability(2.0 / (2 + strategies * (strategies - 1))); // C with computed probability
}
back to overview
9: "Finally Heroe" by J. Brüderl
Program Code:
(strategy's definition)
private int Strategy_sim6(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 6"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
return 0;
} else { // in t>1
if (sum_choices(simu_results[period - 1]) > 0) { // at least one C in t-1
return 0;
} else { // no C in t-1
return c_probability(1.0 / strategies); // C with p=1/N
}
}
}
back to overview
10: "Reciprocating Volunteer" by V. Buskens
Program Code:
(strategy's definition)
private int Strategy_sim7(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 7"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
return c_probability(1.0 / 2);
} else { // in t>1
if (sum_choices(simu_results[period - 1]) == 0) { // no C in t-1
return 1;
} else { // at least one C in t-1
int other_c = sum_choices(simu_results[period - 1]) - simu_results[period - 1][own_idx]; // C-choices from others in t-1
return c_probability((other_c * 1.0) / strategies);
}
}
}
back to overview
11: "Minka" by J. Deuschle
Program Code:
(strategy's definition)
private int Strategy_sim8(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 8"); }
if (period == 1) { // in t=2
return 1;
} else { // in t=1 and t>=3
return 0;
}
}
back to overview
12: "Superrational Strategy" by A. Diekmann
Program Code:
(strategy's definition)
private int Strategy_sim9(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 9"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
//System.out.println("DEBUG: hhh="+ (1.0 - Math.pow((1.0 / strategies) * (5.0 / 10), 1.0 / (strategies - 1))));
return c_probability(1.0 - Math.pow((1.0 / strategies) * (5.0 / 10), 1.0 / (strategies - 1))); // C with computed probability
}
back to overview
13: "Hope" by H. Esser,
"GOLD: Group Accumulation Leads to Defection" by S. Auer (3),
"More Actors, Less Cooperation" by P. Preisendörfer (22)
Program Code:
(strategy's definition)
private int Strategy_sim10(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy_sim10"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
return c_probability(1.0 / strategies); // C with p=1/N
}
back to overview
14: "Cooperate Unexploitably" by M. Franosch
Program Code:
(strategy's definition)
private int Strategy_sim11(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 11"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
return c_probability(1.0 - Math.pow(1.0 / 2, 1.0 / (strategies - 1)));
} else {
int min_val = period; // for comparison includig the smallest number of C-choices
int min_cnt = 0; // counting number of strategies with the smallest number of C-choices
for (int s = 0; s < strategies; s++) {
if (s != own_idx) { // only the other strategies
int c_sum = sum_periods(simu_results, 0, period - 1, s); // counting s's number of C-choices during all previous periods
if (c_sum < min_val) {
min_val = c_sum; // adjusting min_val to the smallest number of C-choices
min_cnt = 1;
} else if (c_sum == min_val) {
min_cnt++; // adding 1 for the strategy which also had the smallest number of C-choices
}
}
}
int c_sum = sum_periods(simu_results, 0, period - 1, own_idx); // counting now the number of own C-choices during all previous periods
if (c_sum < min_val) {
return 1;
} else if (c_sum > min_val) {
return 0;
} else { // c_sum=min_val
return c_probability(1.0 - Math.pow(1.0 / 2, 1.0 / (min_cnt - 1)));
}
}
}
back to overview
15: "Sponger" by T. Gautschi
Program Code:
(strategy's definition)
private int Strategy_sim12(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 12"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
// AAA (strategy corrections OK?)
if (period <= 0) { // in t=1
this.all_d = 0; // counting periods without any C
return 0;
} else { // in t>1
if (sum_choices(simu_results[period - 1]) == 0) { // no C in t-1
this.all_d++;
if (this.all_d >= (strategies - 1)) { // no C for N-1 periods in a row
return c_probability(1.0 / (strategies - 1)); // C with p=1/(N-1)
} else { // at least one C during the previous N-1 periods
return 0;
}
} else { //at least one C in t-1
this.all_d = 0; // set counter for all_d-periods = 0
return 0;
}
}
}
back to overview
16: " Rarified Cooperation" by E. Gehmacher
Program Code:
(strategy's definition)
private int Strategy_sim13(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 13"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
double prob = (1.0 / strategies * 0.9) * (Math.pow((strategies / 15.0), 2.0) + 1.0) * (myrand.random() + 0.5);
return c_probability(prob);
}
back to overview
17: "2gather" by C. Hausen & K. Pforr
Program Code:
(strategy's definition)
private int Strategy_sim14(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 14"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (strategies > 2) { // for N>2
return 0;
} else { // for N=2
if (period <= 0) { // in t=1
this.unequal = 0; // indicating unequal choices in all previous periods
return c_probability(1.0 / 2); // C with p=1/2
} else { // in t>1
int other_idx = (own_idx == 0)? 1 : 0; // for index of other strategy
if (simu_results[period - 1][own_idx] != simu_results[period - 1][other_idx]) { // unequal choices in t-1
this.unequal = 1;
}
if (this.unequal == 0) { // equal choices in all previous periods
return c_probability(1.0 / 2); // C with p=1/2
} else { // at least one previous period with unequal choices
if (period <= 4) { // in t<=5
return (1 - simu_results[period-1][own_idx]); // opposite of previous own choice
} else { // in t>5
int c_sum = sum_periods(simu_results, period - 5, period - 1, other_idx);
if (c_sum == 0) { // no C from the other during the last 5 periods
return 0;
} else { // at least one C from the other during the last 5 periods
if (c_sum > 3) { // for 4 or 5 C from the other during the last 5 periods
return 0;
} else { // for 3 or less C from the other during the last 5 periods
if (period < 9) { // in t<10
return (1 - simu_results[period - 1][own_idx]); // opposite of previous own choice
} else { // in t>=10
// check occurence of pattern D C D C
if (simu_results[period - 4][own_idx] == 0) { // own choice in t-4 was D
int eq_periods = 0; // counting periods with equal choices
for (int p = 1; p <= 4; p++) {
if (simu_results[period - p][own_idx] == simu_results[period - p][other_idx]) {
eq_periods++;
}
}
if (eq_periods == 4) { // equal choices in the 4 previous periods
if ((100 * simu_results[period-3][own_idx] + 10 * simu_results[period-2][own_idx] + simu_results[period-1][own_idx]) == 101) { // choice-pattern of C D C (101)
return 1; // pattern D C D C found
}
}
}
return (1 - simu_results[period-1][own_idx]); // opposite of previous own choice (pattern D C D C not found)
}
}
}
}
}
}
}
}
back to overview
18: "Kopposite" by C. Kopp
Program Code:
(strategy's definition)
private int Strategy_sim15(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 15"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
return 1;
} else { // in t>1
if (((period + 1) % strategies) == 0) { // period divisible by N
return 1;
} else { // period not divisible by N
if (strategies == 2) { // for N=2
int other_idx = (own_idx == 0)? 1 : 0; // for identifying the other player
if (simu_results[period - 1][other_idx] > 0) { // if the other played C
return 1;
} else {
return 0;
}
} else { // for N>2
double prob = 0; // for computing probability for C
int last_periods = Math.min(period, 5); // for giving the number of previous periods for t<5
for (int p = 1; p <= last_periods; p++) {
int d_choices = strategies - sum_choices(simu_results[period - p]); // giving the allowed number of own D-choices
if (simu_results[period - p][own_idx] == 0) { // own choice was D in t-p
d_choices --;
}
prob += (last_periods - p + 1) * (d_choices / (strategies - 1.0));
}
prob /= ((last_periods * (last_periods + 1.0)) / 2);
return c_probability(prob); // C with computed probability
}
}
}
}
back to overview
19: "Mercy Coop" by P. Kriwy
Program Code:
(strategy's definition)
private int Strategy_sim16(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 16"); }
return c_probability(1.0 / 10); // C with p=1/10
}
back to overview
20: "Eve" by E. & N. Lepperhoff
Program Code:
(strategy's definition)
private int Strategy_sim17(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 17"); }
// declaration of variables
int anzahl_c = 0; // counting number of C-choices
int beginn = 1; // 1:1-translation: indicating period t=1
int w = 0; // 1:1-translation: indicating the choice
// definition of variables
if (period <= 0) { // in t=1
// anzahl_c = 0;
// beginn = 1;
} else { // in t>1
anzahl_c = sum_choices(simu_results[period - 1]); // counting the number of C-choices from all players in t-1
beginn = 0;
}
if (beginn > 0) { // in t=1
this.runde_d = 0; // counting the number of previous periods without any C
this.letzte_handlung = 0; // indicating last own choice
}
if (anzahl_c == 0) { // no C in t-1
this.runde_d++;
}
if (anzahl_c - this.letzte_handlung > 0) { // at least one C by others in t-1
this.runde_d = 0;
}
if (this.runde_d >= 4) { // no C during the last 4 periods (t=0 counts as D)
w = 1;
} else {
w = 0;
}
this.letzte_handlung = w;
return w;
}
back to overview
21: "Casual Hero" by U. Liebe,
"Taking Turns" by R. Bekkers (4)
Program Code:
(strategy's definition)
private int Strategy_sim17(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 17"); }
// declaration of variables
int anzahl_c = 0; // counting number of C-choices
int beginn = 1; // 1:1-translation: indicating period t=1
int w = 0; // 1:1-translation: indicating the choice
// definition of variables
if (period <= 0) { // in t=1
// anzahl_c = 0;
// beginn = 1;
} else { // in t>1
anzahl_c = sum_choices(simu_results[period - 1]); // counting the number of C-choices from all players in t-1
beginn = 0;
}
if (beginn > 0) { // in t=1
this.runde_d = 0; // counting the number of previous periods without any C
this.letzte_handlung = 0; // indicating last own choice
}
if (anzahl_c == 0) { // no C in t-1
this.runde_d++;
}
if (anzahl_c - this.letzte_handlung > 0) { // at least one C by others in t-1
this.runde_d = 0;
}
if (this.runde_d >= 4) { // no C during the last 4 periods (t=0 counts as D)
w = 1;
} else {
w = 0;
}
this.letzte_handlung = w;
return w;
}
back to overview
23: "Sizewatcher" by B. Prosch
Program Code:
(strategy's definition)
private int Strategy_sim19(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 19"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
return 0;
} else { // in t>1
if ((sum_choices(simu_results[period - 1]) - simu_results[period - 1][own_idx]) > 0) { // at least one C from others in t-1
return 0;
} else { // no C from others in t-1
return c_probability(1.0 / strategies);
}
}
}
back to overview
24: "Tit for Tat Invers" by C. Schatz
Program Code:
(strategy's definition)
private int Strategy_sim20(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 20"); }
if (period <= 0) { // in t=1
return 0;
} else { // in t>1
if (sum_choices(simu_results[period - 1]) > 0) { // at least one C in t-1
return 0;
} else { // no C in t-1
return 1;
}
}
}
back to overview
25: "Rent-Sharing Cooperation" by K.-U. Schnap
Program Code:
(strategy's definition)
private int Strategy_sim21(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 21"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period < 1) { // t=1
this.own_c_choices = 0; // counting number of own C-choices in a row
return 1;
} else { // t>1
if (strategies <= 6) { // for N<=6
if ((period % strategies) == 0) { // for even numbers of periods (except the first)
return 1;
} else { // for odd numbers of periods
return 0;
}
} else { // for N>6
if ((sum_choices(simu_results[period - 1]) - simu_results[period - 1][own_idx]) == 0) { // no C from others in t-1
if (this.own_c_choices < 5) { // less than 5 times C in a row from oneself
this.own_c_choices++;
return 1;
} else { // 5 times C in a row from oneself
this.own_c_choices = 0;
return 0;
}
} else { // at least one C from others in t-1
return 0;
}
}
}
}
back to overview
26: "Just Distribution" by H. Scholtz
Program Code:
(strategy's definition)
private int Strategy_sim22(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 22"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (period <= 0) { // in t=1
this.num_c = 0; // counting number of players having played C
this.last_c = 0; // indicating period of last own C-choice
return c_probability((period + 1.0) / strategies); // period+1=t
} else { // in t>1
if (simu_results[period - 1][own_idx] > 0) { // own C in t-1
this.last_c = period; // period=t-1
this.num_c = sum_choices(simu_results[period - 1]); // number of C-choices in t-1
}
if (this.last_c == 0) { // no own C so far
return c_probability((period + 1.0) / strategies); // C with p=t/N
} else { // at least one own C so far
double prob = Math.max(0.0, (((period + 1) - this.last_c - strategies + this.num_c) / (this.num_c * 1.0)));
return c_probability(prob);
}
}
}
back to overview
27: "Candle++" by T. Varga
Program Code:
(strategy's definition)
private int Strategy_sim23(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 23"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (strategies >= 8) { // for N>=8
return 0;
} else { // for N<8
if (period <= 0) { // in t=1
this.num_cp = 0; // for num1: counting the previous periods up to t-2 with at least one C
this.other_fc = 0; // for num2: counting the number of "follow-up-C" by others during all previous periods
return 0;
} else {
if (period == 1) { // in t=2
if (sum_choices(simu_results[period - 1]) == 0) { // no C in t=1
return 1;
} else { // at least one C in t=1
return 0;
}
} else { // in t>=3 AAA
int sum_p1 = sum_choices(simu_results[period - 1]); // counting number of C in t-1
if (sum_choices(simu_results[period - 2]) > 0) { // at least one C in t-2
this.num_cp++;
if ((sum_p1 - simu_results[period - 1][own_idx]) > 0) { // at least one "follow-up-C" by others
this.other_fc++;
}
}
if (sum_p1 > 0) { // at least one C in t-1
double condition_value = 0.0;
if (this.num_cp == 0) { // no C up to t-2
condition_value = 1.0;
} else { // at least one C up to t-2
condition_value = (this.other_fc * 1.0) / this.num_cp; // force double for Java AAA
}
if (condition_value >= (1.0 / 2)) { // own choice for t>=3 (for N<=8)
return 0;
} else {
return 1;
}
} else { // no C in t-1
return 1;
}
}
}
}
}
back to overview
28: "Toggle" by M. Vieth
Program Code:
(strategy's definition)
private int Strategy_sim24(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 24"); }
return ((period + 1) & 1); // C in even periods (return 1, if last binary digit equals 1)
}
back to overview
29: "Pawlow" by T. Voss
Program Code:
(strategy's definition)
private int Strategy_sim25(int period, int simu_results[][], int own_idx) {
//if (g_debug_flg) { debug_win.document.writeln("Strategy 25"); }
int strategies = simu_results[period].length; // number of strategies in combination (group size N)
if (strategies == 2) { // for N=2
return c_probability(1.0 / 2);
} else { // for N>2
if (period <= 0) { // in t=1
return 0;
} else { // in t>1
if (sum_choices(simu_results[period - 1]) > 0) { // at least one C in t-1
return 0;
} else { // no C in t-1
return 1;
}
}
}
}
back to overview
© M&M, 13.04.2002 (last change: 13.03.2003)