-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Known bugs, TODO, FIXME #1
Comments
I hope that my comment/advice will not be viewed as trying to lecture you, but I think that keeping a separate Github Issue for each entry in your list will make the whole process more convenient (rather then keeping all issues in a single text file). Both for you and possibly for users. But of course it is completely up to you. I only wanted to share my own experience. |
@hurak :) thank you are right! And better than opening several issues for my todo list is to use directly the GitHub dashboard feature. I also apply what you say but since my projects usually does not interest many people (25 view, 2 clones on 2 weeks), and because of my family disturb me interrupting my work I accustomed committing partial/uncompleted commit/work not to lose it and I rebase and git push force (yeah not nice!). For this particular project, the git history is quite dirty because I did some stop, stalled and go steps. The master is stable and on Julia store, but the dev branch is undone, the comments do no longer match code and I do not remember what I've done in the code and I should end it to merge to the master branch and on Julia. Tell me if you are interested in this project, I can free up some time to make the dev branch in stable state. I also think that Julia is missing petri net editor (the other repo you posted tickets) and to follow https://discourse.julialang.org/t/good-way-for-creating-a-julia-project-binding-a-c-project/85595 |
Well, I think that having a nice and maintained package for (max,+) algebra in Julia will finally be appreciated by a (reasonably) wider community. I guess that the computational wisdom and experience implemented in Julia stands a good chance to eventually reach more people than its counterpart in Scilab (or whatever its derivatives). And even a slightly differently composed community, I guess, things changed with the rise of popularity of machine learning. And (max,+) stuff is not far, is it? I cannot guarantee it, though, because I do not really do research (yet) in this area. As an academic researcher and educator in control systems (my group webpage) I am more focused on the continuous-valued and time-driven dynamics. But I decided to include some discrete-event systems lectures in my brand new graduate course on hybrid systems. And (max,+) algebra is fairly appealing for us, control engineers, for its conceptual closeness with the discrete-time state-space models. I have only recently learnt about this framework. And it appears that some other researchers in control engineering already did quite some interesting work. Just in case you are not aware, there is a series of paper by Bart de Schutter and his colleagues ans students, for example:
At least with this limited exposure, I like the framework. And I am trying to popularize it among my students. And I am directing my students to your package, besides the Matlab toolbox by Jarosław Stańczyk. But obviously I am developing some personal preference for Julia :-) In fact, I already started rewriting (and shortening a bit) your tutorial Jupyter notebook in English :-) But I only started yesterday :-) So, yes, if you still enjoy this work, go ahead, it will be appreciated and perhaps somebody even joins you in this :-) I believe that there is indeed some potential if you package is cleverly interfaced to some optimization solvers so the Bart De Schutter's style MPC problems can be formulated and solved. But again, take me with some reservation, I am not really in this research area (yet). |
@hurak Excellent you have the direct link to Jarosław Stańczyk job. I could not find it anymore (dead url), so I made a fork https://github.com/Lecrapouille/MP else you should have a look to my father webpage https://github.com/jpquadrat/jpquadrat.github.io he worked a lot of (max,+) and his page contains lot of PDF on this point (plus his book https://www.rocq.inria.fr/metalau/cohen/SED/book-online.html). Ok I will free up some time for updating this package. |
@hurak I have almost done fixing the code to get back the retro-compatibility (ε .λ, ...) You can commit your changes concerning the tutorial even if unfinished or not working I'll fix it on the fly. |
@hurak I added some comments in the core part. Hope to be understandable. Next steps on my side will be:
|
I have finally started liking it. I have been working with Matlab for twenty years, therefore I initially found Julia's style disturbing, but now I think I like it better than Matlab's style. You may find the discussions at https://discourse.julialang.org/t/should-transpose-of-a-vector-be-a-matrix/87444 and JuliaLang/LinearAlgebra.jl#42 interesting. There is also a nice talk https://youtu.be/C2RO34b_oPM. It is certainly complicated. But Julia' convention is reasonably well though-out, I guess. |
@hurak yes this is a huge topic, I quickly read threads I did not see people talking about the cache-miss specially when seeing Wolfram doc : matrix is a list of list. When iterating along the vector one by one is ok but when iterating on a single element for each vector this takes more time. Also remembering OpenGL specification doing Matrix as M . x where x is column but the implementation x is line major and therefore instead of doing x' . M they keep doing M . x but with a product where they iterate differently ... all beginners are lost specially when reading tutorials people implementing C++ Vector3f as a pure array that can be used either as line or column vector depending on the context of the matrix operation (meaning no compilation checking against dimensions Lecrapouille/OpenGLCppWrapper#3 ) ... whatever :D |
PS: also in the code I made some non optimized operations sparse => full like Line 114 in 4ca7caa
Also to notice that in Scilab zeros(n,m) creates a sparse matrix while Julia is offering dense zeros() and sparse spzeros(). Scilab behavior makes more sense, particularly we can have huge sparse matrices (i.e. flowshops). But I understand Julia API shall offer both. We have also to check that Julia newer version does not make regressions because a developer did not take care to distinguish between 0 and zero(). |
[JULIA BUG] Patch inside MaxPlus made against Julia >= 0.7 regession concerning identity matrices: calling[bool(true) zero(MP); zero(MP) bool(true)]
instead of[one(MP) zero(MP); zero(MP) one(MP)]
like done in Julia 0.4 See Matrix identity not calling one() ? JuliaLang/LinearAlgebra.jl#659 but could be nice to find a correct fix for Julia.[JULIA BUG]A^0
does not return the correct MP identity matrix because of the Julia bug of identity.[JULIA BUG] SparseMatrixCSC == Still because of erroneous zero() https://github.com/JuliaLang/julia/issues/33332SparseMatrixCSCNo because sparse() can store 0 elements and 0 elements are not Max-Plus 0 elements. MP(sparse([1, 2], [1, 2], [-Inf, -Inf])) == mpzeros(Float64, 2,2) will return true
[JULIA BUG] SparseMatrixCSC = Still because of same reason: confusion with zero()[JULIA BUG] Do not use length() and isempty() for sparse. This returns wrong informations. Seeissue 33360
A^-k
A: matrix or sparcefull mpzeros andsparse mpeye[MP BUG]Same behavior than Scilabmp0 - mp0
returnNaN
instead ofmp0
mptop * mp0
shall return mp0 but return NaN[TODO] Upgrade syslin() to add B, C, D matrixes[MP BUG] star(mpeye) is incorrect(cannot reproduce)[UPGRADE] syslin: use dense matrices instead of sparse (only used for D and x0 in ScicosLab)[MP BUG] Regression: show() seems to have regressed. There are unwanted extra spaces. This is strange because in early commits of this package I could show matrices mixing epsilon or '.' and integers. NowFixed!
Base.:(*)(x::Val(IdentityMatrix), y::Array{MP]) = y
?The text was updated successfully, but these errors were encountered: