本文整理汇总了C#中Cream.Variable类的典型用法代码示例。如果您正苦于以下问题:C# Variable类的具体用法?C# Variable怎么用?C# Variable使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Variable类属于Cream命名空间,在下文中一共展示了Variable类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Relation
public Relation(Network net, Variable v0, bool[][] rel, Variable v1, ConstraintTypes cType, int weight)
: base(net, cType, weight)
{
_rel = rel;
_v0 = v0;
_v1 = v1;
}
示例2: Element
public Element(Network net, Variable v0, Variable v1, Variable[] v, ConstraintTypes cType, int weight)
: base(net, cType, weight)
{
_v0 = v0;
_v1 = v1;
_v = (Variable[])v.Clone();
}
示例3: Sequential
public Sequential(Network net, Variable[] v, int[] l, ConstraintTypes cType, int weight)
: base(net, cType, weight)
{
_v = new Variable[v.Length];
v.CopyTo(_v, 0);
_l = new int[l.Length];
l.CopyTo(_l, 0);
}
示例4: IntArith
private IntArith(Network net, int a, Variable[] v, ConstraintTypes cType = ConstraintTypes.Hard)
: this(net, a, v, cType, 0)
{
}
示例5: IntComparison
public IntComparison(Network net, int comp, Variable v0, int x1)
: this(net, comp, v0, new IntVariable(net, x1))
{
}
示例6: SatisfyLT
private static bool SatisfyLT(Variable v0, Variable v1, Trail trail)
{
var d0 = (IntDomain)v0.Domain;
var d1 = (IntDomain)v1.Domain;
d0 = d0.CapInterval(IntDomain.MinValue, d1.Maximum() - 1);
if (d0.Empty)
return false;
if (trail != null)
{
v0.UpdateDomain(d0, trail);
}
d1 = d1.CapInterval(d0.Minimum() + 1, IntDomain.MaxValue);
if (d1.Empty)
return false;
if (trail != null)
{
v1.UpdateDomain(d1, trail);
}
return true;
}
示例7: VariableToken
public VariableToken(Variable value)
{
_value = value;
}
示例8: NotEquals
public NotEquals(Network net, Variable[] va, ConstraintTypes cType, int weight)
: base(net, cType, weight)
{
_v = new Variable[va.Length];
va.CopyTo(_v, 0);
}
示例9: SatisfyAdd
private static bool SatisfyAdd(Variable v0, Variable v1, Variable v2, Trail trail)
{
var d0 = (IntDomain) v0.Domain;
var d1 = (IntDomain) v1.Domain;
var d2 = (IntDomain) v2.Domain;
if (d1.Size() == 1 && d2.Size() == 1)
{
// v0 = v1 + v2
var value = d1.Value() + d2.Value();
if (!d0.Contains(value))
return false;
if (d0.Size() > 1)
if (trail != null)
{
v0.UpdateDomain(new IntDomain(value), trail);
}
return true;
}
if (d0.Size() == 1 && d2.Size() == 1)
{
// v1 = v0 - v2
var value = d0.Value() - d2.Value();
if (!d1.Contains(value))
return false;
if (d1.Size() > 1)
if (trail != null)
{
v1.UpdateDomain(new IntDomain(value), trail);
}
return true;
}
if (d0.Size() == 1 && d1.Size() == 1)
{
// v2 = v0 - v1
var value = d0.Value() - d1.Value();
if (!d2.Contains(value))
return false;
if (d2.Size() > 1)
if (trail != null)
{
v2.UpdateDomain(new IntDomain(value), trail);
}
return true;
}
// v0 = v1 + v2
d0 = d0.CapInterval(d1.Minimum() + d2.Minimum(), d1.Maximum() + d2.Maximum());
if (d0.Empty)
return false;
if (trail != null)
{
v0.UpdateDomain(d0, trail);
}
// v1 = v0 - v2
d1 = d1.CapInterval(d0.Minimum() - d2.Maximum(), d0.Maximum() - d2.Minimum());
if (d1.Empty)
return false;
if (trail != null)
{
v1.UpdateDomain(d1, trail);
}
// v2 = v0 - v1
d2 = d2.CapInterval(d0.Minimum() - d1.Maximum(), d0.Maximum() - d1.Minimum());
if (d2.Empty)
return false;
if (trail != null)
{
v2.UpdateDomain(d2, trail);
}
return true;
}
示例10: SatisfyMIN
private static bool SatisfyMIN(Variable v0, Variable v1, Variable v2, Trail trail)
{
var d0 = (IntDomain) v0.Domain;
var d1 = (IntDomain) v1.Domain;
var d2 = (IntDomain) v2.Domain;
if (d1.Size() == 1 && d2.Size() == 1)
{
// v0 = Min(v1, v2)
int value = Math.Min(d1.Value(), d2.Value());
if (!d0.Contains(value))
return false;
if (d0.Size() > 1)
if (trail != null)
{
v0.UpdateDomain(new IntDomain(value), trail);
}
return true;
}
if (d0.Size() == 1)
{
int value = d0.Value();
if (!d1.Contains(value) && !d2.Contains(value))
return false;
// ???
if (d1.Minimum() < value)
{
d1.CapInterval(value, IntDomain.MaxValue);
if (d1.Empty)
return false;
if (trail != null)
{
v1.UpdateDomain(d1, trail);
}
}
if (d2.Minimum() < value)
{
d2.CapInterval(value, IntDomain.MaxValue);
if (d2.Empty)
return false;
if (trail != null)
{
v2.UpdateDomain(d2, trail);
}
}
return true;
}
// v0 = Min(v1, v2)
int min = Math.Min(d1.Minimum(), d2.Minimum());
int max = Math.Min(d1.Maximum(), d2.Maximum());
d0 = d0.CapInterval(min, max);
if (d0.Empty)
return false;
if (trail != null)
{
v0.UpdateDomain(d0, trail);
}
//
if (d1.Minimum() < d0.Minimum())
d1 = d1.CapInterval(d0.Minimum(), IntDomain.MaxValue);
if (d2.Minimum() < d0.Minimum())
d2 = d2.CapInterval(d0.Minimum(), IntDomain.MaxValue);
if (d1.Minimum() > d0.Maximum())
{
d0 = (IntDomain) d0.Cap(d2);
d2 = d0;
}
if (d2.Minimum() > d0.Maximum())
{
d0 = (IntDomain) d0.Cap(d1);
d1 = d0;
}
if (d0.Empty)
return false;
if (d1.Empty)
return false;
if (d2.Empty)
return false;
if (trail != null)
{
v0.UpdateDomain(d0, trail);
v1.UpdateDomain(d1, trail);
v2.UpdateDomain(d2, trail);
}
return true;
}
示例11: SatisfyMULTIPLY
private static bool SatisfyMULTIPLY(Variable v0, Variable v1, Variable v2, Trail trail)
{
var d0 = (IntDomain) v0.Domain;
var d1 = (IntDomain) v1.Domain;
var d2 = (IntDomain) v2.Domain;
if (d1.Size() == 1 && d2.Size() == 1)
{
// v0 = v1 * v2
int value = ToInt(d1.Value() * (long) d2.Value());
if (!d0.Contains(value))
return false;
if (d0.Size() > 1)
if (trail != null)
{
v0.UpdateDomain(new IntDomain(value), trail);
}
return true;
}
if (d0.Size() == 1 && d2.Size() == 1)
{
// v1 = v0 / v2
int x = d0.Value();
int y = d2.Value();
if (y == 0)
{
return x == 0;
}
if (x % y != 0)
{
return false;
}
int value = x / y;
if (!d1.Contains(value))
return false;
if (d1.Size() > 1)
if (trail != null)
{
v1.UpdateDomain(new IntDomain(value), trail);
}
return true;
}
if (d0.Size() == 1 && d1.Size() == 1)
{
// v2 = v0 / v1
int x = d0.Value();
int y = d1.Value();
if (y == 0)
{
return x == 0;
}
if (x % y != 0)
{
return false;
}
int value = x / y;
if (!d2.Contains(value))
return false;
if (d2.Size() > 1)
if (trail != null)
{
v2.UpdateDomain(new IntDomain(value), trail);
}
return true;
}
d0 = Multiply(d0, d1, d2);
if (d0.Empty)
return false;
d1 = Divide(d1, d0, d2);
if (d1.Empty)
return false;
d2 = Divide(d2, d0, d1);
if (d2.Empty)
return false;
if (trail != null)
{
if (d0 != v0.Domain)
v0.UpdateDomain(d0, trail);
if (d1 != v1.Domain)
v1.UpdateDomain(d1, trail);
if (d2 != v2.Domain)
v2.UpdateDomain(d2, trail);
}
return true;
}