[Python] Error setting find_lagrangian_options in CspaceFreePolytope.BinarySearchOptions()

Discussão em 'Python' iniciado por Stack, Março 24, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to use C-Iris certificates to shrink polytopes to their maximum volume that can be certified to be collision-free. In doing so, I am following the steps in the deepnote C-Iris implementation examples: link to notebook

    There, the BinarySearchOptions are defined as follows:

    # The options for when we search for new planes and positivity certificates given the polytopes
    find_separation_certificate_given_polytope_options = CspaceFreePolytope.FindSeparationCertificateGivenPolytopeOptions()
    find_separation_certificate_given_polytope_options.num_threads = -1
    find_separation_certificate_given_polytope_options.verbose = False
    find_separation_certificate_given_polytope_options.solver_options = solver_options
    find_separation_certificate_given_polytope_options.ignore_redundant_C = False
    find_separation_certificate_given_polytope_options.solver_id = solver_id

    binary_search_options = CspaceFreePolytope.BinarySearchOptions()
    binary_search_options.find_lagrangian_options = find_separation_certificate_given_polytope_options
    binary_search_options.scale_min = 1e-3
    binary_search_options.scale_max = 1.0
    binary_search_options.max_iter = 5


    In my code, I have modified the implementation to support a newer drake version (1.35.0):

    # Separation certificate options
    find_separation_certificate_given_polytope_options = CspaceFreePolytope.FindSeparationCertificateGivenPolytopeOptions()
    find_separation_certificate_given_polytope_options.parallelism = Parallelism()
    find_separation_certificate_given_polytope_options.verbose = False
    find_separation_certificate_given_polytope_options.solver_options = solver_options
    find_separation_certificate_given_polytope_options.ignore_redundant_C = False
    find_separation_certificate_given_polytope_options.solver_id = solver_id

    # Binary search configuration
    binary_search_options = CspaceFreePolytope.BinarySearchOptions()
    binary_search_options.find_lagrangian_options = find_separation_certificate_given_polytope_options
    binary_search_options.scale_min = 1e-4
    binary_search_options.scale_max = 1.0
    binary_search_options.max_iter = 10
    binary_search_options.convergence_tol = 1e-6


    However, this error is returned:

    ---------------------------------------------------------------------------
    AttributeError Traceback (most recent call last)
    /tmp/ipykernel_57731/3587994562.py in <module>
    42 # Binary search configuration
    43 binary_search_options = CspaceFreePolytope.BinarySearchOptions()
    ---> 44 binary_search_options.find_lagrangian_options = find_separation_certificate_given_polytope_options
    45 binary_search_options.scale_min = 1e-4
    46 binary_search_options.scale_max = 1.0

    AttributeError: can't set attribute


    When I comment the find_lagrangian_options line, the BinarySearch() algorithm works, but it only finds significantly smaller regions than the original polytope (0.0024% of the volume), while the original regions are fairly accurate and such a small shrinkage could not be the maximum.

    I was wondering if this result could be due to having removed the line binary_search_options.find_lagrangian_options = find_separation_certificate_given_polytope_options, and if so, what the proposed solution would be.

    Continue reading...

Compartilhe esta Página