Skip to content

Segmentation fault when running LPs repeatedly #8

Description

@frogeyedpeas

Hello I am using a MAC OS Big Sur Version 11.3.1

When I run the solver multiple times SOMETIMES it segmentation faults, I dont know if this is because of qsopt_ex or because of the cython library. Just copy the code below into a file called reproducing_seg_fault.py and run the program like 20 or so times consecutively. One of the times will result in a segfault (see here)
Screen Shot 2023-03-24 at 8 20 21 PM

Code here:

import qsoptex

import faulthandler
faulthandler.enable()

#import logging
#logging.basicConfig(level=logging.NOTSET)

class Polytope:
    def __init__(self, A, b):
        self.A = A
        self.b = b
        self.status = None
        """
            The status variable carries the status of a most recent solve, if it is set to None then an LP run has not occurred yet 
        """
        self.p = None

    def dimension(self):
        return len(self.A[0])
    
    def inequality_count(self):
        return len(self.A)

    #given an objective array c we attempt to maximize it and return the status, surprising the "c" tells us what the dimension of the problem is 
    def maximize(self, c, flag_integers=True): 
        self.p = qsoptex.ExactProblem()
        for var_number in range(len(c)):
            self.p.add_variable(name='x' + str(var_number), 
                objective=c[var_number], 
                lower=0, upper=1)

        for constraint_number in range(self.inequality_count()):
            self.p.add_linear_constraint(qsoptex.ConstraintSense.LESS, 
                dict(('x' + str(var_number), self.A[constraint_number][var_number]) for var_number in range(len(c))), 
                rhs = self.b[constraint_number], 
                name='c' + str(constraint_number))

        self.p.set_objective_sense(qsoptex.ObjectiveSense.MAXIMIZE)
        self.p.set_param(qsoptex.Parameter.SIMPLEX_DISPLAY, 1)
        print("before seg fault: ")
        self.status = self.p.solve()
        print("after seg fault: ")


    

if __name__ == '__main__':

    #running one at a time never results in a segfault
    #running both of these repeatedly results in a segfault 

 
    A_matrix =  [[1037066, 2074132, 1648264, 796528, 1593056, 686112, 1372224, 244448, 488896, 977792, 1955584, 1411168, 322336, 644672, 1289344, 78688, 157376, 314752, 629504, 1259008], [-1037066, -2074132, -1648264, -796528, -1593056, -686112, -1372224, -244448, -488896, -977792, -1955584, -1411168, -322336, -644672, -1289344, -78688, -157376, -314752, -629504, -1259008]]
    b_matrix =  [2463098, -2463098]
    c_matrix =  [0, -1, 1, -1, 1, -1, 0, 0, 0, 0, -1, 0, -1, -1, 0, 1, 0, 1, 1, -1]

    test_polyhedron = Polytope(A_matrix, b_matrix)
    
    test_polyhedron.maximize( c_matrix)

    A_matrix =  [[1037066, 2074132, 1648264, 796528, 1593056, 686112, 1372224, 244448, 488896, 977792, 1955584, 1411168, 322336, 644672, 1289344, 78688, 157376, 314752, 629504, 1259008], [-1037066, -2074132, -1648264, -796528, -1593056, -686112, -1372224, -244448, -488896, -977792, -1955584, -1411168, -322336, -644672, -1289344, -78688, -157376, -314752, -629504, -1259008]]
    b_matrix =  [2463098, -2463098]
    c_matrix =  [0, -1, 1, -1, 1, -1, 0, 0, 0, 0, -1, 0, -1, -1, 0, 1, 0, 1, 1, -1]

    test_polyhedron = Polytope(A_matrix, b_matrix)

    test_polyhedron.maximize( c_matrix)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions