📄 simpclient.java
字号:
package com.sea0108.simpmethod;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class SimpClient {
public static final Font FONT = new Font("黑体", Font.PLAIN, 12);
private BranchDemarkationMethod bdm = null;
private SimpFrame sf = new SimpFrame();
private int demoCount;
public ArrayList<String> demoProcess;
public SimpClient() {
sf.setVisible(true);
sf.panels[5].setVisible(false);
sf.buttons[6].setEnabled(false);
sf.buttons[7].setEnabled(false);
sf.textArea.setEditable(false);
sf.textArea.setFont(FONT);
listen();
}
private void listen() {
sf.buttons[2].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (getBdm()) {
demoCount = -1;
sf.buttons[5].setEnabled(true);
sf.buttons[6].setEnabled(true);
demoProcess = new ArrayList<String>();
demoProcess.add("\n\t分支定界法解混合整数规划问题的动态演示\n");
demoProcess.addAll(bdm.iterProcess);
demoProcess.add(getResult());
}
}
});
sf.buttons[4].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (demoCount > 0)
sf.textArea.setText("\n\n"
+ (String) demoProcess.get(--demoCount));
previousNextUpdate();
}
});
sf.buttons[5].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
sf.panels[5].setVisible(true);
if (demoCount < demoProcess.size() - 1)
sf.textArea.setText("\n\n"
+ (String) demoProcess.get(++demoCount));
previousNextUpdate();
}
});
sf.buttons[6].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
sf.panels[5].setVisible(true);
sf.buttons[7].setEnabled(true);
sf.textArea.setText("");
for (String s : demoProcess)
sf.textArea.append(s + "\t\n");
}
});
}
private void previousNextUpdate() {
if (demoCount == 0)
sf.buttons[4].setEnabled(false);
else if (demoCount == demoProcess.size() - 1)
sf.buttons[5].setEnabled(false);
else {
sf.buttons[4].setEnabled(true);
sf.buttons[5].setEnabled(true);
}
sf.buttons[7].setEnabled(true);
}
// if the value being returned is true then an Exception occures
private boolean getBdm() {
try {
String[][] mA = sf.getMatrixA();
String[] vB = sf.getVectorB();
String[] fCoefs = sf.getVectorObj();
int[] equationTypes = sf.getInequationsType();
boolean[] isInteger = sf.getIsInteger();
boolean isMaximization = sf.getObjType();
final int row = mA.length;
final int col = mA[0].length;
Fraction[][] matA = new Fraction[row][col];
Fraction[] vecB = new Fraction[row];
Fraction[] funCoefs = new Fraction[col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++)
matA[i][j] = new Fraction(mA[i][j]);
vecB[i] = new Fraction(vB[i]);
}
for (int j = 0; j < col; j++)
funCoefs[j] = new Fraction(fCoefs[j]);
bdm = new BranchDemarkationMethod(matA, vecB, funCoefs,
equationTypes, isInteger, isMaximization);
return true;
} catch (Exception e) {
MDialog dlg = new MDialog(sf, "错误提示", "输入数据不完整或有误");
dlg.setVisible(true);
e.printStackTrace();
return false;
}
}
public String getResult() {
if (bdm == null || bdm.fval == null)
return "\t(无解)";
else {
StringBuilder sb = new StringBuilder("\t(最优解(");
for (int i = 0; i < bdm.ans.length - 1; i++)
sb.append("x" + (i + 1) + ",");
sb.append("x" + bdm.ans.length + ")=(");
for (int i = 0; i < bdm.ans.length - 1; i++)
sb.append(bdm.ans[i] + ",");
sb.append(bdm.ans[bdm.ans.length - 1] + "),目标函数值:");
sb.append(bdm.fval + ")");
return sb.toString();
}
}
public static void main(String args[]) {
new SimpClient();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -