TBD
hidmic / ltitop Goto Github PK
View Code? Open in Web Editor NEWLinear Time Invariant Topology Optimization Toolkit
License: GNU Lesser General Public License v3.0
Linear Time Invariant Topology Optimization Toolkit
License: GNU Lesser General Public License v3.0
scipy
assumes zero LTI models are the result of ill conditioned numerical algorithms. The forked version of scipy
that ltitop
relies on works around this problem, but it's a bad approach. It's ambiguous.
Degenerate models should probably be handled separately and explicitly in ltitop
.
If tree construction, crossover, and mutation ensures that all leaf nodes deal with at least one singularity, tree depth would be limited and redundant branches would be trimmed. Might even address #3 by precluding degenerate models entirely.
Similarly to #14, generating HDL code (such as VHDL or Verilog) allows optimized LTI systems to be deployed to an FPGA or to be manufactured in an ASIC. Having support for HDL generation would be great.
TBD -- but if #14 is in place, we might be able to use bambu to generate Verilog from that C code.
As of today, ltitop
has no documentation. That makes it useless for pretty much anyone.
master
(use Github webhook).See this blog post for useful pointers.
As of today, ltitop
is still pretty much a proof-of-concept. Thus, its code needs polishing, test coverage must be increased, and a continuous integration process be put in place to ensure it stays healthy over time.
tox
Alternative to #2. Algorithms are defined via sympy
symbolic expressions solely to enable term permutation in summations. But such permutations would also be possible in a Python AST.
Why not ast.parse
a function definition to extract its AST? Some feature (i.e. node) pruning is necessary as most Python features are way beyond scope and would be near impossible to transfer upon C or HDL generation, but otherwise this approach would greatly simplify algorithm definitions and potentially boost speed -- sympy
is just too slow.
ltitop.algorithm
module to deal with the new AST.ltitop.topology
using plain Python.Generators and list comprehensions would be super useful when defining sums and products, but, if supported, these have to be expanded upon AST extraction (or term permutation will not be possible). Also, the feature set must be kept at a minimum -- enough to guarantee that algorithms are simply describing operations on a data-flow (or code generation may not be possible).
What ltitop
has right now is on shaky grounds.
Need to find a good book on modular interval arithmetic.
For ltitop
to be anything but a one-man project, some organization has to be put in place.
Evaluate Github Discussions for contributor exchanges.
In retrospect it was a bad call to build an ad hoc AST out of sympy
symbolic expressions. Sympy's code generation infrastructure would be available if ltitop
used sympy.codegen.ast
data structures instead.
The ltitop.algorithms
module is using sympy
code generation functionality to some extent already (e.g. sympy.utilities.lambdify
). Finish the job.
Worst case peak gain in ltitop
is currently estimated by brute force:
ltitop/src/ltitop/models/analysis.py
Lines 45 to 56 in d75f165
Accuracy guarantees are thus quite loose, and the resulting performance is awful. It calls for a better approach.
Distributing ltitop
as a regular Python package is key to ease of use.
setup.cfg
setup.py
pyproject.toml
To actually use and validate an optimized LTI system, it has to be translated into code that can be assembled or compiled for a given processor architecture. C is by far the most common language for that purpose. Thus, putting all together, ltitop
must support C code generation for a given realization or diagram.
In the following, it is assumed that #9 was implemented.
pycparse.c_generator.CGenerator
to generate C code.
Specially when dealing with fixed point values. Arguably, this is a consequence of supporting stateful algorithms with fixed point arithmetic of arbitrary format. It probably can't be improved much for the general case, but for some cases (e.g. when using the FixedFormatArithmeticLogicUnit
) it sure can be.
By moving away from plain NSGA-II, or perhaps by combining it with some niche or "island" strategy, it may be possible to distribute the search load across multiple cores. DEAP already has some examples using SCOOP. Pickling support for candidates is there.
Zero sized intervals not centered at zero are not regarded as underflow:
Should they be?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.