shapleyvalue.com

Attribute value according to a parsimonious game theory solution
Log | Files | Refs

commit 81586a49c523ea29fe02cd1475568b5de3204861
parent 1d0ed53d47e15f007fd55223c7d12a1af4762779
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Sun, 29 Jan 2023 14:13:09 +0100

tweak: remove old index.

Diffstat:
Dindex_old.php | 238-------------------------------------------------------------------------------
1 file changed, 0 insertions(+), 238 deletions(-)

diff --git a/index_old.php b/index_old.php @@ -1,238 +0,0 @@ -<?php - -/* - -* File: /shapleyvalue/calculator -* By: Nuño Sempere -* Date: 23 Sept 2019 -* -* This file calculates the Shapley value of every member of a given coalition. - -*/ - - -## HTML Flavor - -echo '<html>'; - -echo '<head> - <title>Shapley Value Calculator</title> - <meta name="copyright" content="Nuño Sempere López-Hidalgo"> - <meta name="keywords" content="Shapley Value, Shapley value, calculate Shapley value, calculate Shapley value online free, Shapley value program"> - <meta name="description" content="Shapley value calculator"> - <link rel="stylesheet" href="CSS/main.css" type="text/css">'; - // This is the reference to our CSS style sheet.' -echo '</head>'; - -echo '<body>'; - -echo '<h1> Shapley Value Calculator </h1>'; - - -## Pointer to this file - -$thisFile = "index.php"; - -## Decide the Number of Players - -$numPlayers = $_POST["numplayers"] ?? 3; - // It sees what number of players the user has selected. - // If it's the first time the user comes to the webpage, the default will be 3 - - -echo "<form action=".$thisFile." method='post'> - <select name='numplayers'>"; - - for($n = 1; $n<8; $n++){ - - if($n == $numPlayers){ - $hasBeenSelected = "selected = 'selected'"; - }else{ - $hasBeenSelected = ""; - } - echo "<option value =".$n." ".$hasBeenSelected.">Number of players: ".$n."</option>"; - } - - echo "</select>"; - echo "&nbsp;"; - echo "<input type='submit' value='Change' class = 'Buttons'>"; - echo "</form>"; - -## Power set of all players - -for($n = 1; $n <= $numPlayers; $n++){ - $setOfPlayers[$n] = $n; -} - -$powerSet = powerSet($setOfPlayers); - -$i = 0; -foreach($powerSet as $set){ - - $powerSetAsStrings[$i] = setToString($set); - $i++; -} - - -## Forms for the value of the coalition - -$getCoalitionNum = $_POST['CoalitionNum']?? 0; - -if($getCoalitionNum == 0){ - //That is, if we haven't yet posted anything to ourselves regarding the size of the coalition - echo '<form action='.$thisFile.' method = "post">'; - echo '<div class="form">'; - - - echo '<input type="hidden" name="numplayers" value='.$numPlayers.' />'; - $i = 0; - foreach($powerSetAsStrings as $setAsString){ - - echo '<p>'; - echo '<label>Value of coalition '.$setAsString.': </label>'; - echo '<input type="number" name="CoalitionNum['.$i.']" value = "0" class = "Box">'; - echo '</p>'; - $i++; - } - echo '</br>'; - - echo '</div>'; - echo '<input type="submit" value="Compute" class="Buttons" >'; - echo '</form>'; - -}else{ - - echo '<form action='.$thisFile.' method = "post">'; - - echo '<input type="hidden" name="numplayers" value='.$numPlayers.' />'; - - echo '<div class="form">'; - $i = 0; - foreach($powerSetAsStrings as $setAsString){ - - echo '<p>'; - echo '<label>Value of coalition '.$setAsString.': </label>'; - echo '<input type="number" name="CoalitionNum['.$i.']" value ='.$getCoalitionNum[$i].' class = "Box">'; - echo '</p>'; - $i++; - } - echo '</br>'; - - echo '</div>'; - echo '<input type="submit" value="Compute" class="Buttons" >'; - echo '</form>'; - - -## Compute the Shapley values -// Now, we have posted our data to ourselves. Note that we're still inside the else{} part of the loop -// All that remains is to do the actual calculations. - -$i = 0; - -/* - -Reminder - -numPlayers: number of players -setOfPlayers: Numbers from 1 to n -powerSet: The power set of the above. All the different possible combinations. -getCoalitionNum: The value of coalitions 1 through 2^# -*/ - - -$i = 0; - -for($n = 0; $n<$numPlayers; $n++){ - $Impact[$n] = 0; -} - -foreach($powerSet as $set){ - // in_array() function: will be useful. https://www.php.net/manual/es/function.in-array.php - - $size = sizeof($set); - if($size !=0){ - foreach($set as $player){ - - $marginalImpact = $getCoalitionNum[$i] - $getCoalitionNum[$i - pow(2,($player-1) ) ]; - $Impact[$player-1] += $marginalImpact / choose($size-1,$numPlayers-1); - } - } - - $i++; - -} - -echo '<p>'; -for($n=1; $n <=$numPlayers; $n++){ - echo "The Shapley value of player ".$n." is: ".$Impact[$n-1]/$numPlayers."</br>"; -} -echo '</p>'; - -} // this is the end of the else{} part of the "have we posted any data to ourselves yet" question. Only executes if we indeed have. - - -## More HTML flavor -//echo '<h3>Also of interest:</h3> -// <a href="url">Shapley value resources</a> </br>' -echo '<p>'; -echo '<br /></br>'; -echo '<a href="https://nunosempere.github.io/">Other things I have done</a> </br>'; -echo '</p>'; -echo '</body>'; -echo '</html>'; - - -## Functions - -function powerSet($array){ - - $results = array(array()); - foreach($array as $element){ - foreach($results as $combination){ - array_push($results, array_merge(array($element), $combination)); - } - } - return $results; - // https://docstore.mik.ua/orelly/webprog/pcook/ch04_25.htm -} - - - -function setToString($set){ - - $size = sizeof($set); - - if($size == 0){ - - return "{}"; - - }else{ - $return = "{"; - for($i=0; $i<$size-1; $i++){ - $return .= $set[$i].", "; - } - $return .= $set[$i]."}"; - return $return; - } -} - -function factorial($n){ - if($n == 0){ - return 1; - }else{ - - $f = 1; - for($i=$n; $i>=1;$i--){ - $f *= $i; - } - return $f; - } -} - -function choose($m, $n){ - // Choose n objects among m choices - return factorial($n) / (factorial($m)*factorial($n-$m)); - -} - -?>