ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution Class Reference

Calculates peer review distribution (rater to peer assignments) More...

+ Collaboration diagram for ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution:

Public Member Functions

 __construct (array $user_ids, int $num_assignments)
 ExcPeerReviewDistribution constructor. More...
 
 getUserOrder ()
 
 getPeersOfRater (int $user_id)
 Get peers of rater. More...
 

Protected Member Functions

 initDistribution ()
 
 randomUserOrder (array $user_ids)
 Random user order. More...
 

Protected Attributes

array $user_ids = []
 
array $user_order = []
 
int $num_assignments
 

Detailed Description

Calculates peer review distribution (rater to peer assignments)

This is a simple algorithm, that ensures that each rater has $num_assignments peers to review and each peer has $num_assignments raters.

It starts by creating a random order of the users. After that it assignes the next $num_assignments users to a rater with index $i ($i+1 to $i+$numassignments) as peers. (Starting back from 0 if the counter exceeds the number of users)

Note that this will not include all theoretical combinations, but the randomization is good enough and the code much easier to maintain.

u0 u1 u2 u3 u4 (raters) u0 2 1 u1 1 2 u2 2 1 u3 2 1 u4 2 1 (peers)

Example above for 5 users and 2 assignments.

Author
Alexander Killing killi.nosp@m.ng@l.nosp@m.eifos.nosp@m..de

Definition at line 48 of file class.ExcPeerReviewDistribution.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::__construct ( array  $user_ids,
int  $num_assignments 
)

ExcPeerReviewDistribution constructor.

Parameters
int[]$user_ids

Definition at line 58 of file class.ExcPeerReviewDistribution.php.

References ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution\$num_assignments, and ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution\initDistribution().

59  {
60  $this->user_ids = array_values($user_ids); // ensure numerical indexing
61 
62  // we cannot assign more users to a single user than count($user_ids) - 1
63  $num_assignments = min($num_assignments, count($user_ids) - 1);
64 
65  // we cannot create a negative number of assignments
67 
68  $this->num_assignments = $num_assignments;
69  $this->initDistribution();
70  }
+ Here is the call graph for this function:

Member Function Documentation

◆ getPeersOfRater()

ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::getPeersOfRater ( int  $user_id)

Get peers of rater.

Returns
int[]

Definition at line 104 of file class.ExcPeerReviewDistribution.php.

References ILIAS\LTI\ToolProvider\$key, and ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution\$num_assignments.

104  : array
105  {
106  $peers = [];
107  $key = array_search($user_id, $this->user_order);
108  if ($key === false) {
109  return [];
110  }
111  for ($j = 1; $j <= $this->num_assignments; $j++) {
112  $peer_key = ($key + $j) % (count($this->user_order));
113  $peers[] = $this->user_order[$peer_key];
114  }
115  return $peers;
116  }
string $key
Consumer key/client ID value.
Definition: System.php:193

◆ getUserOrder()

ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::getUserOrder ( )

◆ initDistribution()

ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::initDistribution ( )
protected

Definition at line 72 of file class.ExcPeerReviewDistribution.php.

References ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution\randomUserOrder().

Referenced by ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution\__construct().

72  : void
73  {
74  $this->user_order = $this->randomUserOrder($this->user_ids);
75  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ randomUserOrder()

ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::randomUserOrder ( array  $user_ids)
protected

Random user order.

Parameters
int[]
Returns
int[]

Definition at line 82 of file class.ExcPeerReviewDistribution.php.

Referenced by ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution\initDistribution().

82  : array
83  {
84  $order = [];
85  while (count($user_ids) > 0) {
86  $next = rand(0, count($user_ids) - 1);
87  $order[] = $user_ids[$next];
88  unset($user_ids[$next]);
89  $user_ids = array_values($user_ids); // re-index
90  }
91  return $order;
92  }
+ Here is the caller graph for this function:

Field Documentation

◆ $num_assignments

int ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::$num_assignments
protected

◆ $user_ids

array ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::$user_ids = []
protected

Definition at line 50 of file class.ExcPeerReviewDistribution.php.

◆ $user_order

array ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution::$user_order = []
protected

The documentation for this class was generated from the following file: