Hi all,

The status of libpc project as of now is as follows.

1. Abstraction Framework - Objects implemented : Parameters, Variables
and Constraints, Constraint Network
2. Solution System - Generic solver testing all possible variable
assignment combinations, Graph specific solver using boost graph
library
3. Math Virtual Machine (work in progress) - expected to be complete
with around 400 to 500 lines of code change at max.
4. Basic constraint I/O in librt - will need changes till constraint
grammar is finalized

In the long run, I am sure that the rigor of the solver would be the
major factor in terms of usability as well as performance. Even though
I have been toying around with some generic constraint solvers as well
as geometric ones, I haven't found one which could be easily
integrated into brl-cad. The ideal approach would be to make the
solver an independent module. This would not only support using
multiple solvers by using the same "protocol or format", but also
simplify the process of progress in terms of solver optimizations.

I believe a good project definition for the approximately 480 coding
hours of gsoc ( May 23rd to August 10th) is as follows.

1. Solution system (~170 hours)
Undoubtedly the most important aspect of the constraint system. Two
approaches can be taken for modularity of the solver from other parts
of libpc. One way would be to use a server-client model possibly using
inter-process communication or a simple file based transfer of data
between the two. Alternatively it could be a part of the libpc library
itself requiring a particular format of the constraint satisfaction
problem. This could be passed on to the solver as string data or as a
data structure. Of the various approaches towards solving geometrical
constraints, I am slightly in favour of  graph-constructive methods
over the others (see #1) But eventually I think something like a Locus
Intersection method (#4)  which is a hybrid between the computational
and search approaches would be ideal. One of the reasons I feel that
the solver should be completely independent of the constraint
satisfaction problem definition or representation is the fact that it
is a field rapidly undergoing changes in terms of new approaches.

2. Constraint grammar (~100 hours)
This would be dependent on the underlying Math grammar system. Testing
out the grammar system would include correct parsing of expressions
implying the constraints into the constraint objects.
For instance ( " tangential(ell1, sph1)" being parsed into the correct
constraint objects containing evaluating functions in terms of the
variables )

3. Test Use-cases for Implicit Constraints (~80 hours)
This involves using the libpc framework for doing the rt_prep checks
for each of the geometry primitives. This work can be pursued
independent of the work on the solution system , using the existing
generic solver. Also in terms of implementation this would be a good
start to finalize the common type of constraints grammar wise (
parallelism, perpendicularity etc.)

4. Test Use-cases for Explicit Constraints (~130 hours)
With the wrapping up of Math Virtual Machine and grammar, this work is
effectively the test of the entire framework and would involve purely
construction of test cases.

In addition the following also need to be done.

* Some tinkering is also needed to make the existing code more modular.
* There is also a "small" memory leak in the solver which needs to be
taken care of.

In the meantime, I will try to wrap up the documentation which needs a
major overhaul and
more importantly finish off with the MathVM completion which I have
started in March.

Schedule

May 23 - July 6 (~ 6 weeks)
* Do further groundwork on Solver
* Finalising Constraint grammar
* Work on Implicit Constraints
* Initial solver work
July 6 - August 10 (~ 5 weeks)
* Complete Solver work
* Test Explicit Constraints

Other Notes
There are many aspects of libpc which I have not taken into
consideration in this proposal , for instance the integration with
libged so that the whole system becomes accessible to the end user.
But I believe the above mentioned aspects need to be taken care of
first for any progress.
Considering my last year experience, I still think this is probably a
little more than what I should really aim for.

References:
#1. A GEOMETRIC C, ONSTRAINT SOLVER, W Bouma, I Fudos, C Hoffmann, J
Cai, R Paige - Computer Aided Design, 1995
http://www.cs.purdue.edu/research/technical_reports/1993/TR%2093-054.pdf

#2. A Modular Geometric Constraint Solver for User Interface
Applications, Hiroshi Hosobe , ACM symposium on User interface
software and technology, 2001
http://portal.acm.org/citation.cfm?id=502348.502362

#3. Solving geometric constraint systems, GA Kramer, BB Qh - 1992 -
eprints.kfupm.edu.sa
http://eprints.kfupm.edu.sa/65700/

#4 Solving spatial basic geometric constraint configurations with
locus intersection, XS Gao, CM Hoffmann, WQ Yang - Computer-Aided
Design, 2004 - Elsevier
doi:10.1016/S0010-4485(03)00056-3

Sincerely yours,
-- 
Dawn Thomas

" the strength to change what i can, the inability to accept what i
can't, and the incapacity to tell the difference"

------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-devel

Reply via email to