?? grouppartial.cpp
字號:
// GroupPartial.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "GroupPartial.h"
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <iterator>
#include <atlstr.h> //use of CString in readInData
#include <algorithm> //use of sort in mapping
#define MAX_LOADSTRING 100
// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_GROUPPARTIAL, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GROUPPARTIAL));
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage are only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GROUPPARTIAL));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_GROUPPARTIAL);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);
}
//
// FUNCTION: InitInstance(HINSTANCE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
float Group::calculatefiteness(vector<int> x) // 這個函數是為了讓 getresult能用而臨時寫的,請蔣云鵬重新寫這個函數
{
return 0.0;
}
//*******************從以下開始有效*****************************************************//
Group::Group(int N, int M)
{
partialNum = N;
jobNum = M;
}
void Group::getResult(vector<int> gBest)
{
cout<<"The best sequence of job is :";
for( int i = 0; i < jobNum; i ++)
cout<< gBest[i] <<", "<<endl;
cout<<endl;
cout<<"The minimum object function value is : "<<calculatefiteness(gBest) << endl;
}
vector <jobInfoNode > Group::readInJobInfo(long jobNumber)
{
// note that jobNumber is vector <jobInfoNode>, and v is vector<vector<doubel>>.
// filePath and fileType
CString PREFIX = "E:\\Pros\\PSO\\jobInfo_";
CString POSTFIX = ".dat";
jobInfoNode tempNode;
vector <jobInfoNode > jobVec; //final mainJobInfo would be read in ultimately
//to find the filePath= "E:\Pros\PSO\jobInfo_100.dat";
CString tempCS;
tempCS.Format('%d',jobNumber);
CString filePath = PREFIX+tempCS+POSTFIX;
vector <vector<double> > v;
ifstream in(filePath);
double tmp;
char dummy;
v.push_back(vector<double>());
vector<double>* p = &v.back();
// tempVec.push_back(0);
while(!in.eof()) //read data
{
while(in.peek() == ' ') in.read(&dummy, 1); //eat space
if(in.peek() == '\n')
{
v.push_back(vector<double>());
p = &v.back();
}
in >> tmp;
p->push_back(tmp);
}
//assign read-in-data v to leftData and rightData
long rowNum=v.size();
int columnNum=v[0].size();
//to judge whether the dimension of the read in data matrix is jobNumber × 4
if (rowNum!=jobNumber || columnNum != 4) // 4 is the number of members of struct jobInfoNode
{
cout<<"Abnormality occurs when reading in datum: the dimension of the read in data matrix is not jobNumber × 4. Check...";
}
cout<<"rowNum and columnNum of jobInfo"<<endl<<rowNum<<endl<<columnNum<<endl;
for (int r=0; r<jobNumber; r++)
{
tempNode.p = v[r][0];
tempNode.d = v[r][1];
tempNode.w1= v[r][2];
tempNode.w2= v[r][3];
jobVec.push_back(tempNode);
}
return jobVec;
}; // 讀入每個job的信息(w', w'',d, p),并把它寫到 jobInfo中
vector<int> Group::mapping(vector<float> floatVec)
{
int vecSize = floatVec.size(); //vecSize equals to jobNumber
vector <int > intVec=vector<int > ();
//sort...
vector <float > tempFloatVec =floatVec;
sort(tempFloatVec.begin(),tempFloatVec.end());
int index=0;
for (int p=0; p<vecSize;p++)
{
for (int q=0; q<vecSize; q++)
{
if (floatVec[q]==tempFloatVec[p])
{
intVec[index++]=q; break;
}
}
}
return intVec;
}; // vector<int> mapping (vector<float> 這里輸入變量是 xj), 輸出是 xj 相對應的工作的一個排序
void main()
{
int N = 6;
Group group = Group(30,6);
long jobNumber = 100;
vector <jobInfoNode > mainJobInfo = group.readInJobInfo(jobNumber);
//test the correctness of data read in
cout<<"test read in data as below:"<<endl;
for (int s =0; s<jobNumber;s++)
{
cout<<mainJobInfo[s].p<<"\t"<<mainJobInfo[s].d<<"\t"<<mainJobInfo[s].w1<<"\t"<<mainJobInfo[s].w2<<"\t"<<endl;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -