将SATSolver从SAT4J更改为MiniSAT时执行错误

时间:2016-04-07 18:41:59

标签: alloy

在我的Java代码中,当我将SATSolver从SAT4J更改为MiniSatJNI或MiniSatProverJNI时:

  var selectedPartecipants = [NSDate]() // this is the array [Item[0], Item[1] etc... ]

 func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {



            if let deselectedData:NSDate = partecipantsAtEvent[indexPath.row].date! {


                                if let index = selectedPartecipants.indexOf(deselectedData) {

                    selectedPartecipants.removeAtIndex(index)
                  ("item[0] cancelled - I have to search the item in collection view that now is new item[0] in the array")


            }

        }


    }

例如,要:

A4Options options = new A4Options();
options.solver = A4Options.SatSolver.SAT4J;

然后致电:

A4Options options = new A4Options();
options.solver = A4Options.SatSolver.MiniSatProverJNI;

我收到以下执行错误:

A4Solution currentAns = TranslateAlloyToKodkod.execute_command(null,
                        javaMetamodel.getAllReachableSigs(), command, options);

任何帮助?

2 个答案:

答案 0 :(得分:0)

@Aleksandar指出的解决方案: Alloy API resulting in java.lang.UnsatisfiedLinkError

在linux上为我工作!!!但它不适用于Windows。

感谢您的帮助!

答案 1 :(得分:0)

Alloy使用JNDI / JNI调用本机解算器(如MiniSAT)。这意味着必须先正确配置本机库。如果您没有配置库correclty,Java将生成一个" java.lang.UnsatisfiedLinkError"异常。

Alloy可分发jar包含正确配置的Windows库,用于Windows" x86"对于Linux和Mac中的" x86"和" x64"。这意味着如果您使用的是Java 32位,那么jar将在Windows中运行,无需任何其他配置,但不能使用Java 64位。在其他操作系统中,您可以使用两个Java版本(32位和64位)。

您可以查看other questions in StackOverflow获取相同的说明。