Skip to content

CeresRealizerDiagnostic.kt

src/jvmMain/kotlin/afield/examples/ceres/CeresRealizerDiagnostic.kt · 32 lines

package afield.examples.ceres

import afield.geometry.polytope.CeresRelaxationOptions
import afield.geometry.polytope.RelaxationPlan
import afield.geometry.polytope.conway
import afield.geometry.polytope.relaxWithCeres

fun main()

What the Ceres problem actually looks like for each solid, as Ceres itself reports it.

fun main() {
    for (expr in listOf("C", "aC", "tC", "kC", "tI", "kkC")) {
        val seed = conway(expr).polyhedron
        val v = seed.topology.elements(0).size
        val e = seed.topology.elements(1).size
        val f = seed.topology.elements(2).size
        val r = seed.relaxWithCeres(
            RelaxationPlan.canonicalConditions(),
            CeresRelaxationOptions(maxIterations = 200),
        )
        val s = r.summary
        println(
            "%-4s V=%-3d E=%-4d F=%-3d | blocks=%-4d params=%-4d (points=%-4d) residuals=%-5d | %s".format(
                expr, v, e, f,
                s.parameterBlockCount,
                s.effectiveParameterCount,
                3 * v,
                s.residualCount,
                s,
            ),
        )
    }
}