Comments (6)
- I'm trying to templatize as much of the code as possible (maybe one day to avoid building the library altogether, and just #including files), mostly to avoid inheritance. This is both for performance reasons, and also because it allows people to use their own classes for models instead of using the ones provided. Say you have a particular MDP/POMDP which you can implement very efficiently in some way; if I was using inheritance integrating it with the library would be very hard. With templates however it's easy.
- I've removed the link for the same reason. If you have an MDP model which is implemented in some weird way, you can use my POMDP model with it instantly, without having to write any code. This also allows for using a POMDP::Model with both an MDP::Model and MDP::RLModel, for example. All in all, the less links between each part, the easier to use.
At the moment policies are instead still linked with inheritance. This is mostly because each policy class is very similar to the other ones and they reuse lots of functionality, so there's little reason not to do that. However I'm not a true C++ expert myself so maybe one day that will also change.
There isn't all that much Boost, is there? What are the parts that trouble you most? If you have any problems contributing just send me an email or write something here, I can help, or maybe write more docs where they are needed =)
Thanks for the comments!
from ai-toolbox.
Thanks for the clarification. It makes sens.
Actually you're right, it's not Boost but stuffs like std::is_same<decltype(test<M>(0)),std::true_type>::value && is_generative_model<M>::value
that frightens me, there is too much template and namespace I can handle for now :). However, i'll need one day to dive into it to use the new version of the lib (I think this version is not compatible anymore with the one I use).
from ai-toolbox.
Yes, unfortunately I do tend to break things, but I'm not that experienced so I'm learning things as I go, and I hope that each change makes the whole better for it.
Those parts are in general to simplify compiler errors for users (look up SFINAE), it's not really meant to be touched all that much! It's so that you can have template requirements specified in a simple way (so I can say, for example, that in an algorithm that uses an MDP that the MDP class will allow for certain methods - kind of an abstract class). But sure, take your time, there's still much that I have to do anyway =)
from ai-toolbox.
I agree that hard inheritance can be restraining, i.e. if POMDP > MDP, it will be hard to add a class inbetween. However, if for some reasons I want to solve an MDP with POMCP, I cannot (due to the sampleSOR in simulate that doesn't exists in MDP). In either case, there is downside. I don't know if some kind of Java Interfaces, like partially observable, completely observable, mixed-observable etc., would work in order to specify more like an authorized behaviour than a strict model.
from ai-toolbox.
if for some reasons I want to solve an MDP with POMCP, I cannot
Except by transforming the MDP to a POMDP of course.
from ai-toolbox.
Well POMCP is an algorithm to apply Monte Carlo Tree Search to POMDPs, so it makes little sense to apply it to MDPs. If you need Monte Carlo for MDPs, might as well use MCTS (coming soon btw).
Edit: MCTS is now online for you to try out =)
from ai-toolbox.
Related Issues (20)
- Python module problem HOT 26
- Using the Toolbox to solve the Tag problem HOT 4
- Save POMDP policy HOT 6
- Sparse Matrix's on POMDP model HOT 22
- Improve serialization for MDP and POMDP Sparse Models HOT 1
- Problem with make HOT 5
- Make cannot find .hpp file in Boost HOT 2
- Errors when compiling tutorials HOT 5
- Can't find Lpsolve when run cmake HOT 9
- Using AI-Toolbox with OMNeT++ HOT 2
- Make issue HOT 9
- Not able to find "compare" file HOT 3
- Trouble installing and running AIToolbox HOT 9
- about LP_Solve HOT 13
- error C3779: 'AIToolbox::IndexMapIterator<IdsIterator,Container>::operator *': a function that returns 'auto' cannot be used before it is defined HOT 11
- Better Project Setup Tutorial HOT 6
- C++: error: expected โ)โ before โelementsNโ HOT 10
- Problems when building the library HOT 4
- Sparse Matrix: Space Time Complexity while assigning and accessing an element. HOT 1
- Can't build because of lpslove HOT 16
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ai-toolbox.