⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpmatrixprocpanel.java

📁 我自己编写的一个LP算法的Java程序
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LPMatrixProcPanel extends JPanel{
	
	double a[][] = new double[4][6];
	double x[] = new double[4];
	int enteredn1, enteredn2, entered;
	
	public void paint(Graphics g) {
		super.paint(g);
		g.setColor(Color.white);
		g.drawRect(10, 10, 250, 150);
		for(int i=0; i<4; i++) {
			for(int j=0; j<5; j++) {
				g.drawString(String.valueOf(a[i][j]), j*50+20 , i*25+43);
			}
		}
		g.drawString("x*=("+x[0]+", "+x[1]+", "+x[2]+", "+x[3]+")", 30, 143);
		g.drawString("Z*="+a[3][0], 160, 143);
	}
	
	LPMatrixProcPanel(double c0x1, double c0x2, double c1x1, double c1x2, double c2x1, double c2x2, double r1, double r2) {
		valueMatrix(c0x1, c0x2, c1x1, c1x2, c2x1, c2x2, r1, r2);
		consoleShow();
	}
	
	public void valueMatrix(double c0x1, double c0x2, double c1x1, double c1x2, double c2x1, double c2x2, double r1, double r2) {
		for(int i=0; i<4; i++) {
			for(int j=0; j<6; j++) {
				a[i][j]=0;
			}
		}
		a[0][1]=c0x1;
		a[0][2]=c0x2;
		a[1][1]=c1x1;
		a[1][2]=c1x2;
		a[1][3]=1;
		a[2][1]=c2x1;
		a[2][2]=c2x2;
		a[2][4]=1;
		a[1][0]=r1;
		a[2][0]=r2;
		x[0]=0; x[1]=0; x[2]=a[1][0]; x[3]=a[2][0];
		enteredn1=3; enteredn2=4;
	}
	
	public void showMatrixProc() {
		int count=-1;
		while(++count<50) {
			for(int i=0; i<5; i++) {
				a[3][i]=a[1][5]*a[1][i]+a[2][5]*a[2][i]-a[0][i];
			}
			double min=a[3][1];
			a[0][5]=1;
			for(int i=2; i<5; i++) {
				if(a[3][i]<min) {
					min=a[3][i];
					a[0][5]=i;
				}
			}
			if(a[1][0]/a[1][(int)a[0][5]]<a[2][0]/a[2][(int)a[0][5]]) {
				a[3][5]=3;
				enteredn1=(int)a[0][5];
				entered=4;
			}
			else {
				a[3][5]=4;
				enteredn2=(int)a[0][5];
				entered=3;
			}
			
			consoleShow();
			this.paint(this.getGraphics());
			
			try {
				Thread.sleep(500);
			}
			catch(InterruptedException ex) {
			}
			if(a[3][0]>=0&&a[3][1]>=0&&a[3][2]>=0&&a[3][3]>=0&&a[3][4]>=0) break;
			a[(int)a[3][5]-2][5]=a[0][(int)a[0][5]];
			for(int i=1; i<5; i++) {
				a[0][i]=a[3][i];
			}
			double temp1=a[1][(int)a[0][5]];
			double temp2=a[2][(int)a[0][5]];
			temp1=temp1-a[1][(int)a[3][5]];
			temp2=temp2-a[2][(int)a[3][5]];
			a[1][(int)a[0][5]]=a[1][(int)a[3][5]];
			a[2][(int)a[0][5]]=a[2][(int)a[3][5]];
			for(int i=0; i<6; i++) {
				if(i!=(int)a[0][5]) {
					a[1][i]=a[1][i]-temp1;
					a[2][i]=a[2][i]-temp2;
					if(enteredn1==(int)a[0][5])
						x[enteredn2-1]=a[entered-2][0];
					if(enteredn2==(int)a[0][5])
						x[enteredn1-1]=a[entered-2][0];
				}
			}
			x[(int)a[0][5]-1]=a[(int)a[3][5]-2][0];
			x[(int)a[3][5]-1]=0;
		}
		if(count<50) {
			JOptionPane.showMessageDialog(this, "You got one result!", "Result", JOptionPane.INFORMATION_MESSAGE);
		}
		else {
			JOptionPane.showMessageDialog(this, "Tried 50 times no results!", "Result", JOptionPane.INFORMATION_MESSAGE);
		}
	}
	
	public void consoleShow() {
		for(int i=0; i<4; i++) {
			for(int j=0; j<6; j++) {
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}
		System.out.println();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -