Skip to content

Commit 1a23a6f

Browse files
Used MixedSequenceProfile in LP and LCP solvers.
1 parent 980eae6 commit 1a23a6f

File tree

3 files changed

+23
-45
lines changed

3 files changed

+23
-45
lines changed

src/solvers/enumpoly/gameseq.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class MixedSequenceProfile {
8787
}
8888
}
8989
}
90-
}
90+
};
9191

9292
class GameSequenceForm {
9393
private:

src/solvers/lcp/efglcp.cc

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -423,42 +423,28 @@ void NashLcpBehaviorSolver<T>::GetProfileNew(const linalg::LemkeTableau<T> &tab,
423423
auto player2 = *it;
424424
auto sequences1 = sequenceForm.GetSequences(player1);
425425
auto sequences2 = sequenceForm.GetSequences(player2);
426+
Gambit::MixedSequenceProfile<T> msp;
426427
for (auto seq : sequences1) {
427-
auto parentSeq = seq->parent.lock();
428-
if (parentSeq) {
429-
auto action = seq->action;
430-
int index = seq->number;
431-
int parentIndex = parentSeq->number;
432-
v[action] = static_cast<T>(0);
433-
if (tab.Member(parentIndex)) {
434-
const int ind = tab.Find(parentIndex);
435-
if (sol[ind] > p_solution.eps && tab.Member(index)) {
436-
const int ind2 = tab.Find(index);
437-
if (sol[ind2] > p_solution.eps) {
438-
v[action] = sol[ind2] / sol[ind];
439-
}
440-
}
441-
}
428+
int seq_num = seq->number;
429+
if (tab.Member(seq_num)) {
430+
int index = tab.Find(seq_num);
431+
msp[seq] = (sol[index] > p_solution.eps) ? sol[index] : static_cast<T>(0);
432+
}
433+
else {
434+
msp[seq] = static_cast<T>(0);
442435
}
443436
}
444437
for (auto seq : sequences2) {
445-
auto parentSeq = seq->parent.lock();
446-
if (parentSeq) {
447-
auto action = seq->action;
448-
int index = seq->number;
449-
int parentIndex = parentSeq->number;
450-
v[action] = static_cast<T>(0);
451-
if (tab.Member(ns1 + parentIndex)) {
452-
const int ind = tab.Find(ns1 + parentIndex);
453-
if (sol[ind] > p_solution.eps && tab.Member(ns1 + index)) {
454-
const int ind2 = tab.Find(ns1 + index);
455-
if (sol[ind2] > p_solution.eps) {
456-
v[action] = sol[ind2] / sol[ind];
457-
}
458-
}
459-
}
438+
int seq_num = seq->number;
439+
if (tab.Member(ns1 + seq_num)) {
440+
int index = tab.Find(ns1 + seq_num);
441+
msp[seq] = (sol[index] > p_solution.eps) ? sol[index] : static_cast<T>(0);
442+
}
443+
else {
444+
msp[seq] = static_cast<T>(0);
460445
}
461446
}
447+
msp.ToMixedBehaviorProfile(v);
462448
}
463449

464450

src/solvers/lp/lp.cc

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -191,24 +191,16 @@ void GameData<T>::GetBehaviorNew(MixedBehaviorProfile<T> &v, const Array<T> &p_p
191191
auto player2 = *it;
192192
auto sequences1 = sequenceForm.GetSequences(player1);
193193
auto sequences2 = sequenceForm.GetSequences(player2);
194+
Gambit::MixedSequenceProfile<T> msp;
194195
for (auto seq : sequences1) {
195-
auto parentSeq = seq->parent.lock();
196-
if (parentSeq) {
197-
auto action = seq->action;
198-
int index = seq->number;
199-
int parentIndex = parentSeq->number;
200-
v[action] = (p_dual[parentIndex] > static_cast<T>(0)) ? p_dual[index] / p_dual[parentIndex] : static_cast<T>(0);
201-
}
196+
int index = seq->number;
197+
msp[seq] = p_dual[index];
202198
}
203199
for (auto seq : sequences2) {
204-
auto parentSeq = seq->parent.lock();
205-
if (parentSeq) {
206-
auto action = seq->action;
207-
int index = seq->number;
208-
int parentIndex = parentSeq->number;
209-
v[action] = (p_primal[parentIndex] > static_cast<T>(0)) ? p_primal[index] / p_primal[parentIndex] : static_cast<T>(0);
210-
}
200+
int index = seq->number;
201+
msp[seq] = p_primal[index];
211202
}
203+
msp.ToMixedBehaviorProfile(v);
212204
}
213205

214206
//

0 commit comments

Comments
 (0)