コード例 #1
0
ファイル: randlrhom.py プロジェクト: Jakobularius/PHCpack
def random_difference(n, k, p, q):
    """
    Returns a difference that has the same sum as
    the difference between p and q, but with a redistribution.
    """
    diff = difference(n, k, p, q)
    print 'the original difference :', diff
    rootcount = 0
    while(rootcount == 0):
        S = sum(diff)
        result = []
        for i in range(k-1):
            if(S > n-k):
                r = randint(0, n-k)
            else:
                r = randint(0, S)
            result.append(r)
            S = S - r
        result.append(S)
        result.sort(reverse=True)
        print 'original:', diff, 'redistributed:', result
        ind = 0
        while((ind < k-1) and (result[ind] > n-k)):
            d = result[ind] - n + k
            result[ind] = n-k
            result[ind+1] = result[ind+1] + d
            ind = ind + 1
        result.sort(reverse=True)
        q.sort(reverse=True)
        bp = partition2bracket(n, k, p)
        bq = partition2bracket(n, k, q)
        br = partition2bracket(n, k, result)
        rootcount = resolve(n, k, [bp, bq, br], False)
    return result
コード例 #2
0
def random_difference(n, k, p, q):
    """
    Returns a difference that has the same sum as
    the difference between p and q, but with a redistribution.
    """
    diff = difference(n, k, p, q)
    print 'the original difference :', diff
    rootcount = 0
    while (rootcount == 0):
        S = sum(diff)
        result = []
        for i in range(k - 1):
            if (S > n - k):
                r = randint(0, n - k)
            else:
                r = randint(0, S)
            result.append(r)
            S = S - r
        result.append(S)
        result.sort(reverse=True)
        print 'original:', diff, 'redistributed:', result
        ind = 0
        while ((ind < k - 1) and (result[ind] > n - k)):
            d = result[ind] - n + k
            result[ind] = n - k
            result[ind + 1] = result[ind + 1] + d
            ind = ind + 1
        result.sort(reverse=True)
        q.sort(reverse=True)
        bp = partition2bracket(n, k, p)
        bq = partition2bracket(n, k, q)
        br = partition2bracket(n, k, result)
        rootcount = resolve(n, k, [bp, bq, br], False)
    return result
コード例 #3
0
ファイル: randlrhom.py プロジェクト: Jakobularius/PHCpack
def write_triplet(n, k, p, q):
    """
    Given a partition p and its complement q, computes the difference,
    and checks the sum.
    """
    r = difference(n, k, p, q)
    q.sort(reverse=True)
    r.sort(reverse=True)
    # print 'the triplet :', p, q, r
    bp = partition2bracket(n, k, p)
    bq = partition2bracket(n, k, q)
    br = partition2bracket(n, k, r)
    rc = resolve(n, k, [bp, bq, br], verbose=False)
    print 'the brackets :', bp, bq, br, 'root count :', rc
コード例 #4
0
def write_triplet(n, k, p, q):
    """
    Given a partition p and its complement q, computes the difference,
    and checks the sum.
    """
    r = difference(n, k, p, q)
    q.sort(reverse=True)
    r.sort(reverse=True)
    # print 'the triplet :', p, q, r
    bp = partition2bracket(n, k, p)
    bq = partition2bracket(n, k, q)
    br = partition2bracket(n, k, r)
    rc = resolve(n, k, [bp, bq, br], verbose=False)
    print 'the brackets :', bp, bq, br, 'root count :', rc
コード例 #5
0
ファイル: randlrhom.py プロジェクト: Jakobularius/PHCpack
def main():
    """
    Prompts the user for n, k, and m.
    """
    n = input('Give the ambient dimension : ')
    k = input('Give the dimension of the planes : ')
    m = 3 # input('Give the number of conditions : ')
    print '-> the parameters :', n, k, m
    ans = raw_input('generate all partitions ? (y/n) ')
    if(ans == 'y'):
        generate_all_partitions(n, k, write)
    else:
        p, q, r = random_triplet(n, k)
        bp = partition2bracket(n, k, p)
        bq = partition2bracket(n, k, q)
        br = partition2bracket(n, k, r)
        print 'the bracket representation :', bp, bq, br
        rc = resolve(n,k, [bp, bq, br], verbose=False)
        print 'the root count :', rc
コード例 #6
0
def main():
    """
    Prompts the user for n, k, and m.
    """
    n = input('Give the ambient dimension : ')
    k = input('Give the dimension of the planes : ')
    m = 3  # input('Give the number of conditions : ')
    print '-> the parameters :', n, k, m
    ans = raw_input('generate all partitions ? (y/n) ')
    if (ans == 'y'):
        generate_all_partitions(n, k, write)
    else:
        p, q, r = random_triplet(n, k)
        bp = partition2bracket(n, k, p)
        bq = partition2bracket(n, k, q)
        br = partition2bracket(n, k, r)
        print 'the bracket representation :', bp, bq, br
        rc = resolve(n, k, [bp, bq, br], verbose=False)
        print 'the root count :', rc
コード例 #7
0
ファイル: randlrhom.py プロジェクト: Jakobularius/PHCpack
def generate_all_differences2(n, k, p, q, val, r, fun=None):
    """
    Recursive enumerator for all differences,
    as called by generate_all_differences.
    """
    if(len(r) == k):
        br = partition2bracket(n, k, r)
        rc = resolve(n, k, [p, q, br], False)
        if(rc > 2):
            if(fun != None):
                fun(p,q,br,rc)
            else:
                print 'brackets :', [p, q, br], 'root count :', rc
    elif(len(r) == k - 1):
        if(val <= r[k-2]):
            generate_all_differences2(n, k, p, q, 0, r+[val], fun)
    else:
        upper = min([val, n-k, r[len(r)-1]])
        lower = val/(k - len(r))
        for i in range(lower, upper+1):
            generate_all_differences2(n, k, p, q, val-i, r+[i], fun)
コード例 #8
0
def generate_all_differences2(n, k, p, q, val, r, fun=None):
    """
    Recursive enumerator for all differences,
    as called by generate_all_differences.
    """
    if (len(r) == k):
        br = partition2bracket(n, k, r)
        rc = resolve(n, k, [p, q, br], False)
        if (rc > 2):
            if (fun != None):
                fun(p, q, br, rc)
            else:
                print 'brackets :', [p, q, br], 'root count :', rc
    elif (len(r) == k - 1):
        if (val <= r[k - 2]):
            generate_all_differences2(n, k, p, q, 0, r + [val], fun)
    else:
        upper = min([val, n - k, r[len(r) - 1]])
        lower = val / (k - len(r))
        for i in range(lower, upper + 1):
            generate_all_differences2(n, k, p, q, val - i, r + [i], fun)