Presentation is loading. Please wait.

Presentation is loading. Please wait.

THAWAN KOOBURAT CS635 TOOLS AND ENVIRONMENTS FOR OPTIMIZATION SPRING 2011 NEOS Java Developer Tutorial 1.

Similar presentations


Presentation on theme: "THAWAN KOOBURAT CS635 TOOLS AND ENVIRONMENTS FOR OPTIMIZATION SPRING 2011 NEOS Java Developer Tutorial 1."— Presentation transcript:

1 THAWAN KOOBURAT CS635 TOOLS AND ENVIRONMENTS FOR OPTIMIZATION SPRING 2011 NEOS Java Developer Tutorial 1

2 NEOS The Network-Enabled Optimization System  Since 1995  Provides interface to varieties of solvers and modeling languages  Both commercial and open-source solvers  Modeling Languages: GAMS, AMPL, MPS, etc.  Provides various submission interface  Web, Email and XML-RPC  Solvers are located at various institutions and countries  UW-Madison, ANL, ASU, Austria, Spain 2

3 Architecture Job submission Server Solver MINOS : GAMS User Web: Upload file XML-RPC: Job XML 3

4 Web Submission Combine data and model into the same file  Some commands are not available or may create error option minlp = dicopt; Choose solver for the list  http://www.neos-server.org/neos/solvers/index.html http://www.neos-server.org/neos/solvers/index.html Upload model files  MINOS - GAMS 4

5 Let’s try Solving diet problem using MINOS  Using test server  http://neos1.chtc.wisc.edu/neos/solvers/nco:MINOS/GAMS.html http://neos1.chtc.wisc.edu/neos/solvers/nco:MINOS/GAMS.html Use the model file from tutorial package  resources/tutorial/simplediet.txt The result is same as the list file produced by GAMS 5

6 XML-RPC Language-independent protocol  Java, Python, etc. Need to submit problem to NEOS using Job XML  Go back to submission page  Check Dry run box at the bottom and hit submit  File content is included as a node in a tree See the XML Specification of each solver  Click on XML-RPC link on the top right corner 6

7 Developer Tutorial Learn how to submit job to NEOS using Java (via XML-RPC) Writing a simple applet  Accept user input  Generate model and submit job to NEOS  Parse result  Display output 7

8 Development Environment Recommended IDE: Eclipse Prepare tutorial project  Extract zip file into Eclipse’s workspace folder  Open Eclipse  File-> New -> JavaProject  Type “DietGAMS” and press next all the way  Or uncheck “default location” Point to path where tutorial is extracted 8

9 Hello World! org.neos.tutorial.HelloNEOS.java  Solver support + and x operation See Job XML spec from  http://www.neos-server.org/neos/solvers/test:HelloNEOS/default-help.html http://www.neos-server.org/neos/solvers/test:HelloNEOS/default-help.html Create job XML  NeosJobXml job = NeosJobXml("test", "HelloNEOS", "default");  Category :test  Solver Name:HelloNEOS  Input Method:default 9

10 Hello World! (cont.) Add parameters  job.addParam("num1", "55");  Parameter Name:num1  Value:55 Connect to server  NeosClient client = new NeosClient(HOST, PORT); Submit job  NeosJob result = client.submitJob(job.toXMLString()); Getting result  result.getResult() 10

11 SimpleDiet Start with a command line version The diet model is already loaded into “model” variable. Modify line 39 and 40 to submit this problem to MINOS solver Lookup Job XML spec to see what are needed  http://neos1.chtc.wisc.edu/neos/solvers/nco:MINOS/GAMS-help.html http://neos1.chtc.wisc.edu/neos/solvers/nco:MINOS/GAMS-help.html The result should print to console 11

12 Parsing Result We may need to visualize the result We provide facility to parse solution output: SolutionParser  http://neos2.chtc.wisc.edu/NEOS/index.php/Developer_Guides#Output_Parser SolutionData xx = parser.getSymbol("xx", SolutionData.VAR, 2); xx.getRows().get(1) getIndex(0) getIndex(1) getLevel() 12 parser.getModelStatusCode()

13 Solution Parser Usage Enable solution parser in our example  SOLUTION_PARSER = true Look at the result and indentify data to extract Modify the rest to get the actual data 13

14 Results.txt SolutionParser limitation  The output from list file has low precision  We want data in other forms Results.txt allows you to send back anything you want from the model  Use ‘put’ facility to write output to results.txt  Retrieve the results.txt file from the server  You may use comma-separate format for easy parsing 14

15 Results.txt (cont.) Enable results.txt in our example  RESULTS_TXT = true Check the model file  resources/tutorial/simplediet.txt [Optional] Add more put command, use comma to separate each column Run the example 15

16 Simple Diet Applet Accept user input to modify the data  Let user select the list of food Generate model and submit problem to NEOS  Incorporate the modified data into model file Retrieve and parse the output  Parse the output into our internal representation Visualize the result  Use Java swing components or chart to display. 16

17 Java Applet Crash Course Java Applet  Java application which use Applet as a top-level container  Archived in ‘jar’ format  The applet is execute locally on user machine GUI model – Layers of components  Useful reference guides  Components: http://download.oracle.com/javase/tutorial/ui/features/components.html  Layouts: http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html JScrollPane JTable JPanel JButton Applet 17

18 Classes SimpleDietApplet  SimpleDietPanel  SimpleFoodSelectionPanel SimpleDietResultFrame  SimpleDietChartPanel 18

19 SimpleDietPanel 19 UI Layout JFrame JPanel (SimpleDietPanel) JPanel (buttonPanel) JButton JPanel (FoodSelectionPanel)

20 SimpleDietPanel 20 How the buttons works JPanel (buttonPanel) Submit Reset public void createGUI() { JButton submitButton = new JButton("Submit"); submitButton.setActionCommand(SUBMIT_COMMAND); submitButton.addActionListener(this); JButton resetButton = new JButton("Reset"); resetButton.setActionCommand(RESET_COMMAND); resetButton.addActionListener(this); } public void createGUI() { JButton submitButton = new JButton("Submit"); submitButton.setActionCommand(SUBMIT_COMMAND); submitButton.addActionListener(this); JButton resetButton = new JButton("Reset"); resetButton.setActionCommand(RESET_COMMAND); resetButton.addActionListener(this); } public class SimpleDietPanel extends JPanel implements ActionListener public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals(SUBMIT_COMMAND)) submitJob(); else if (command.equals(RESET_COMMAND)) clearSelection(); } public class SimpleDietPanel extends JPanel implements ActionListener public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals(SUBMIT_COMMAND)) submitJob(); else if (command.equals(RESET_COMMAND)) clearSelection(); }

21 SimpleDietPanel 21 How stuff get displayed public void createGUI() { setLayout(new BorderLayout());.. JPanel buttonPanel = new JPanel(new GridLayout(1, 2)); buttonPanel.add(submitButton); buttonPanel.add(resetButton); add(buttonPanel, BorderLayout.SOUTH); selectionPanel = new SimpleFoodSelectionPanel(foodList); add(selectionPanel, BorderLayout.CENTER); setPreferredSize(new Dimension(500, 300)); public void createGUI() { setLayout(new BorderLayout());.. JPanel buttonPanel = new JPanel(new GridLayout(1, 2)); buttonPanel.add(submitButton); buttonPanel.add(resetButton); add(buttonPanel, BorderLayout.SOUTH); selectionPanel = new SimpleFoodSelectionPanel(foodList); add(selectionPanel, BorderLayout.CENTER); setPreferredSize(new Dimension(500, 300)); SimpleDietPanel selectionPanel submit reset Layout Reference Guide: http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html North South Center

22 SimpleDietPanel Application Logic  SimpleFood class is internal data representation  String shortName – name used in the model (Read from text file)  String longName – named used to display to user (Read from text file)  Boolean selected – is this food selected by user (Modify by user)  Double buy – The amount purchase (Need to extract from GAMS output)  submitJob()  Divide model into 3 parts dataDomain – Set declarations selected – Set of selected food model – the rest of data and model Need to allow user to select list of food 22 Set fs(f) foods selected / Bro1,Chi66,Por50,Pot7,Tor56 /; Parameters.. Table.. Positive Variable.. Equations.. Parameters.. Table.. Positive Variable.. Equations.. Sets n nutrients / Calories, Cholesterol,… Set f foods / Bro1, Car2, Cel3, Cor4, Let5, … Sets n nutrients / Calories, Cholesterol,… Set f foods / Bro1, Car2, Cel3, Cor4, Let5, …

23 SimpleFoodSelectionPanel Use JTable to display data Need to extends AbstractTableModel to create a table that map each cell (row, column) to our data  Specify column names,  Modify getValueAt() and setValueAt() columnNames food.getSelected() food.setSelected() food.getSelected() food.setSelected() food.getLongName() 23

24 SimpleDietPanel Translate user selection into GAMS data The model is expecting a selected list of food  Set fs(f) foods selected / Bro1,Chi66,Por50,Pot7,Tor56 /; Uncomment code in the constructor to enable FoodSelectionPanel Modify getSelection() to generate this string  Use our wrapper class to create GAMS data  http://neos2.chtc.wisc.edu/NEOS/index.php/Developer_Guides#Input_Data_Generator http://neos2.chtc.wisc.edu/NEOS/index.php/Developer_Guides#Input_Data_Generator 24

25 SimpleDietChartPanel Assume that we are able to get back correct data  food.getBuy() will return the amount of food bought Display this data using chart (JFreeChart)  JFreeChart is free, but its documentations are not  Distributed binary contains demo to show sample charts Modify generateChart() to populate JFreeChart dataset  dataset.addValue( VALUE, SERIES, CATEGORY );  Category Name :blank (empty string)  Series Name:longName  Value:buy 25

26 SimpleDietResultFrame Extends JFrame  So that it can be launch as a stand-alone popup Implements ResultCallback interface  Will explain later why we should use this interface  Receive job info after it is submitted  handleJobInfo(int jobNo, String jobPass);  Receive output when job completes  handleFinalResult(String results); Modify handleFinalResult()  Use solution parser to extract value (level) from buy variable  Update by “buy” value 26

27 SimpleDietPanel Putting all together Need to launch job popup when we submit a job  Create an instance of SimpleDietResultFrame  [1] Call handleJobInfo, and handleFinalResult to display output Did you notice that UI freeze when you hit submit button? Application is single thread, so it is blocked waiting for result  [2] Use submitJobNonBlocking(String xml, ResultCallback callback) It accepts object that implement ResultCallback interface Will spawn a thread can call those methods when information is available 27

28 SimpleDietApplet Wrapper to provide container in Applet environment Tell SimpleDietPanel to run in applet mode  Applet to a different method to read file included in its archive  FileUtils already take care of this, but we need to tell it which mode we are using  FileUtils.APPLET_MODE :Running inside a jar file  FileUtils.APPLICATION_MODE :Running normally 28

29 Prepare Applet Archive 29 Use Eclipse utility to create archive  Right click DietJar.jardesc  Select “Create JAR” Sign the archive  Certain operations are restricted when running as Applet  Signing allow us to remove some restrictions  Windows:Double-click “signjar.bat” in Windows explorer  UNIX:Run “signjar.sh”  Any external libraries need to be signed as well  All jar in slib folder is signed

30 Run Applet in Browser SimpleDietApplet.html  Use tag to display applet  CODE:Fully-qualify class name  ARCHIVE:List of jars file used by this applet  WIDTH, HEIGHT:Control display area Open this file in web browser to see the applet 30

31 Publish to Wiki See Diet Case study for example  http://neos2.chtc.wisc.edu/NEOS/index.php/Diet_Problem_Demo http://neos2.chtc.wisc.edu/NEOS/index.php/Diet_Problem_Demo Create account, add new page, upload Jar file Use tag to display applet  code:Fully-qualify class name  archive:List of jars file used by this applet. Jar used by this demo is already uploaded. archive="SignedDiet.jar,Commons-logging-1.1.jar,.."  width, height:Control display area 31

32 Tips Works in modules and compose them together  Handle exact component layout at the last stage Get a command line version working first Think about infeasible  What to say to user, Limit execution time Good internal data representation make life easy 32

33 Questions 33


Download ppt "THAWAN KOOBURAT CS635 TOOLS AND ENVIRONMENTS FOR OPTIMIZATION SPRING 2011 NEOS Java Developer Tutorial 1."

Similar presentations


Ads by Google