|
@ -1,4 +1,6 @@ |
|
|
#include <iostream>
|
|
|
#include <iostream>
|
|
|
|
|
|
#include <boost/algorithm/string.hpp>
|
|
|
|
|
|
#include "storm/utility/file.h"
|
|
|
#include "storm/storage/expressions/Expression.h"
|
|
|
#include "storm/storage/expressions/Expression.h"
|
|
|
#include "storm/storage/expressions/ExpressionManager.h"
|
|
|
#include "storm/storage/expressions/ExpressionManager.h"
|
|
|
#include "storm-pomdp/analysis/WinningRegion.h"
|
|
|
#include "storm-pomdp/analysis/WinningRegion.h"
|
|
@ -157,6 +159,61 @@ namespace pomdp { |
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void WinningRegion::storeToFile(std::string const& path) const { |
|
|
|
|
|
std::ofstream file; |
|
|
|
|
|
storm::utility::openFile(path, file); |
|
|
|
|
|
bool firstLine = true; |
|
|
|
|
|
for (auto const& i : observationSizes) { |
|
|
|
|
|
if(!firstLine) { |
|
|
|
|
|
file << " "; |
|
|
|
|
|
} else { |
|
|
|
|
|
firstLine = false; |
|
|
|
|
|
} |
|
|
|
|
|
file << i; |
|
|
|
|
|
} |
|
|
|
|
|
file << std::endl; |
|
|
|
|
|
for (auto const& obsWr : winningRegion) { |
|
|
|
|
|
for (auto const& bv : obsWr) { |
|
|
|
|
|
bv.store(file); |
|
|
|
|
|
file << ";"; |
|
|
|
|
|
} |
|
|
|
|
|
file << std::endl; |
|
|
|
|
|
} |
|
|
|
|
|
storm::utility::closeFile(file); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WinningRegion WinningRegion::loadFromFile(std::string const& path) { |
|
|
|
|
|
std::ifstream file; |
|
|
|
|
|
std::vector<uint64_t> observationSizes; |
|
|
|
|
|
storm::utility::openFile(path, file); |
|
|
|
|
|
std::string line; |
|
|
|
|
|
bool firstLine = true; |
|
|
|
|
|
uint64_t observation = 0; |
|
|
|
|
|
WinningRegion wr({1}); |
|
|
|
|
|
while (std::getline(file, line)) |
|
|
|
|
|
{ |
|
|
|
|
|
std::vector<std::string> entries; |
|
|
|
|
|
if(firstLine) { |
|
|
|
|
|
boost::split(entries, line, boost::is_space()); |
|
|
|
|
|
std::vector<uint64_t> observationSizes; |
|
|
|
|
|
for(auto const& entry : entries) { |
|
|
|
|
|
observationSizes.push_back(std::stoul(entry)); |
|
|
|
|
|
} |
|
|
|
|
|
wr = WinningRegion(observationSizes); |
|
|
|
|
|
firstLine = false; |
|
|
|
|
|
} else { |
|
|
|
|
|
boost::split(entries, line, boost::is_any_of(";")); |
|
|
|
|
|
entries.pop_back(); |
|
|
|
|
|
for (std::string const& bvString : entries) { |
|
|
|
|
|
wr.update(observation, storm::storage::BitVector::load(bvString)); |
|
|
|
|
|
} |
|
|
|
|
|
++observation; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
storm::utility::closeFile(file); |
|
|
|
|
|
return wr; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |