Автор работы: Пользователь скрыл имя, 09 Ноября 2012 в 03:18, курсовая работа
Целью работы является реализация решения транспортной задачи методом потенциалов в системе Android, используя технические возможности устройства, применяя навыки и умения, полученные во время обучения.
Для достижения поставленной цели были поставлены следующие задачи:
Ознакомиться с операционной системой Google Android
Ознакомиться с особенностями разработки приложений на Android
Освоить среду разработки Eclipse для создания приложений
Разработать приложение для решения транспортной задачи
Введение 3
ГЛАВА 1. ИНФОРМАЦИЯ О ПЛАТФОРМЕ GOOGLE ANDROID 5
1.1. Устройства 5
1.2. Разработка программного обеспечения 5
1.3. Список версий Android 6
1.4. Альтернативные прошивки 11
1.5. Сравнение с другими операционными системами 12
ГЛАВА 2. ТРАНСПОРТНАЯ ЗАДАЧА ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ 21
2.1. Формулировка транспортной задачи 21
2.2. Методы построения начального опорного плана 28
2.3. Итерации 31
2.4. Алгоритм решения транспортной задачи методом потенциалов 34
ГЛАВА 3. СОЗДАНИЕ ПРИЛОЖЕНИЯ 36
3.1. Информация о Sony Ericsson Xperia Pro 36
3.2. Среда разработки Eclipse и Android SDK 37
3.3. Процесс создания приложения 40
Заключение 49
Список литературы 50
}
}
Правый клик на папку layout, далее New -> Other -> Android ->Android Xml Layout File. Даем ему имя: solve.
Добавляем туда нужные нам элементы, пишем код:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.
android:layout_width="fill_
android:layout_height="fill_
android:gravity="top"
android:paddingLeft="20dip"
android:paddingRight="20dip"
android:background="#E5E1E2">
<LinearLayout
android:id="@+id/post"
android:layout_width="fill_
android:layout_height="wrap_
android:orientation="
android:paddingBottom="10dip"
android:paddingTop="10dip" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_
android:layout_height="wrap_
android:layout_gravity="
android:layout_weight="0.78"
android:text="Количество поставщиков "
android:textColor="#000000" />
<EditText
android:id="@+id/a"
android:layout_width="40dip"
android:layout_height="40dip"
android:layout_gravity="left"
android:ems="10"
android:inputType="
android:text="3" />
</LinearLayout>
<LinearLayout
android:id="@+id/potr"
android:layout_width="fill_
android:layout_height="wrap_
android:layout_below="@+id/
android:orientation="
android:paddingBottom="10dip"
android:paddingTop="10dip" >
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_
android:layout_height="wrap_
android:layout_weight="0.29"
android:text="Количество потребителей "
android:textColor="#000000" />
<EditText
android:id="@+id/b"
android:layout_width="40dip"
android:layout_height="40dip"
android:ems="10"
android:inputType="
android:text="4" />
</LinearLayout>
<EditText
android:id="@+id/values"
android:layout_width="wrap_
android:layout_height="wrap_
android:layout_alignLeft="@+
android:layout_alignRight="@+
android:layout_below="@+id/
android:ems="10"
android:hint="5 2 3 6"
android:inputType="
android:lines="5"
android:text="5 2 3 6
4 3 5 7
2 4 1 5
300 310 320
250 200 150 180" />
<Button
android:id="@+id/solve"
android:layout_width="fill_
android:layout_height="wrap_
android:layout_below="@+id/
android:layout_centerVertical=
android:text="@string/solve_
<TextView
android:id="@+id/resultField"
android:layout_width="fill_
android:layout_height="wrap_
android:layout_below="@+id/
android:textColor="#000000"
android:textAppearance="?
android:text="" />
</RelativeLayout>
И у нас получается:
Правый клик на src - > trans.wert1go.namespace -> New -> Class.
Name: solve
Superclass: android.app.Activity
В этом активити пишем основной код при помощи которого и решается транспортная задача. Его очень много поэтому он будет в приложениях. В итоге у нас при нажатии на кнопку «Решить» приложение выдает ответ. Выглядит это так:
В ходе выполнения данной работы были изучены теоретические материалы про систему Android, освоена среда разработки Eclipse и комплекс средств разработки, предоставленный компанией Google «Android SDK», позволяющий использовать все основные функции Android в своем приложении.
Так же сделаны выводы, что платформа Google Android в данное время является одним из лидирующих среди смартфонов и сенсорных телефонов. В отличие от его основных конкурентов Android растет с «бешеной» скоростью. Буквально три года назад об этой платформе знали только те, кто интересовался высокими технологиями, а сейчас же все предпочитают приобретать гаджеты именно с этой операционной системой. Преимущества платформы очевидны — удобный и современный интерфейс, открытость и отсутствие необходимости лицензионных отчислений, а также простота разработки приложений. Все это делает ее очень привлекательной для производителей устройств и конечных пользователей. Наличие единой универсальной среды распространения программ тоже является одним из серьезных преимуществ платформы. Высокая распространенность системы и простота написания приложений делает платформу привлекательной для разработчиков.
ПРИЛОЖЕНИЕ
Solve.java
package trans.wert1go.namespace;
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.content.Intent;
import android.view.View.
import android.widget.EditText;
import android.widget.TextView;
public class solve extends Activity implements
android.view.View.
String mResult;
int D;
int n, m;
int c[][], dc[][]; // с - входные данные, цена доставки
String[] tokens;
int A[], B[], Ap[], Bp[], Afp[], Bfp[];
// A B - входные данные, потребность
// и количество запаса, Ap Bp -
// массив потенциалов, Afp Bfp -
// массив проверки потенциалов
int A_check[], B_check[];
int O[][]; // O - выходной массив
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(
setContentView(R.layout.solve)
// Регистрируем кнопку
View mSolveButton = findViewById(R.id.solve);
mSolveButton.
EditText mEditGrid = (EditText) findViewById(R.id.values);
mEditGrid
.setText(Html
.fromHtml("7 2 3 5<br>4 4 3 1<br>2 1 4 6<br>200 300 400<br>210 220 250 220"));
}
@Override
public void onClick(View v) {
getData();
O = new int[n][m];
minElements();
optimPlan();
showResult();
}
private void showResult() {
TextView mResultField = (TextView) findViewById(R.id.resultField)
String result = "";// результирующая строка
result += "Оптимальный план:";
result += "<br>";
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
result += O[i][j] + " ";
if (O[i][j] < 100)
result += " ";
if (O[i][j] < 10)
result += " ";
}
result += "<br>";
}
result += "F=";
int F = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
F += O[i][j] * c[i][j];
result += F;
mResultField.setText(Html.from
}
private int convStrToInt(String s) {
// Проверяем были ли введенны данные вообще
int t;
if (s.length() == 0) {
s = "1";
t = 1;
} else
t = Integer.parseInt(s); // Достаем из строки число типа int
return t;
}
private void getData() {
// Определяем поля входных данных
EditText mEditA = (EditText) findViewById(R.id.a);
EditText mEditB = (EditText) findViewById(R.id.b);
EditText mEditGrid = (EditText) findViewById(R.id.values);
// Получение введенных данных
n = convStrToInt(mEditA.getText().
m = convStrToInt(mEditB.getText().
c = new int[n][m];
A = new int[n];
B = new int[m];
String values = mEditGrid.getText().toString() + " ";
String st = "";
int k = 0;
for (int t = 0; t < values.length(); t++) {
if (Character.isDigit(values.
st += values.charAt(t);
} else {
if (st != "") {
if (k < n * m) {
c[k / m][k % m] = Integer.parseInt(st);
} else {
if (k < n * m + n) {
A[k - m * n] = Integer.parseInt(st);
} else {
B[k - m * n - n] = Integer.parseInt(st);
}
}
st = "";
k++;
}
}
}
}
private void setVectorValue(int V[], int size, int Value) {
for (int i = 0; i < size; i++)
V[i] = Value;
}
private void searchMin() {
int mi = 0;
int mj = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (A_check[i] + B_check[j] == 0) {
mi = i;
mj = j;
}
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (A_check[i] + B_check[j] == 0) {
if (c[i][j] < c[mi][mj]) {
mi = i;
mj = j;
}
}
// нашел минимальный элемент
if (A[mi] < B[mj]) {
O[mi][mj] = A[mi];
B[mj] = B[mj] - A[mi];
A[mi] = 0;
} else {
O[mi][mj] = B[mj];
A[mi] = A[mi] - B[mj];
B[mj] = 0;
}
if (A[mi] == 0)
A_check[mi] = 1;
if (B[mj] == 0)
B_check[mj] = 1;
}
private void minElements() {
A_check = new int[n];
B_check = new int[m];
setVectorValue(A_check, n, 0);
setVectorValue(B_check, m, 0);
int flag = 0;
do {
searchMin();
int checkSumA = 0;
int checkSumB = 0;
for (int i = 0; i < n; i++)
checkSumA += A_check[i];
for (int j = 0; j < m; j++)
checkSumB += B_check[j];
if ((checkSumA == n) || (checkSumB == m))
flag = 1;
} while (flag != 1);
}
private void potenzial() {
Ap[0] = 0;
setVectorValue(Ap, n, 0);
setVectorValue(Bp, m, 0);
setVectorValue(Afp, n, 0);
setVectorValue(Bfp, m, 0);
Afp[0] = 1;
int flag = 0;
do {
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (((Afp[i] + Bfp[j]) == 1) && (O[i][j] != 0)) {
if (Afp[i] == 1)
Bp[j] = c[i][j] - Ap[i];
if (Bfp[j] == 1)
Ap[i] = c[i][j] - Bp[j];
Afp[i] = 1;
Bfp[j] = 1;
}
int checkSumA = 0;
int checkSumB = 0;
for (int i = 0; i < n; i++)
checkSumA += Afp[i];
for (int j = 0; j < m; j++)
checkSumB += Bfp[j];
if ((checkSumA == n) && (checkSumB == m))
flag = 1;
} while (flag != 1);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
dc[i][j] = c[i][j] - (Ap[i] + Bp[j]);
}
private void cikl() {
int mi = 0, mj = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (dc[i][j] < dc[mi][mj]) {
mi = i;
mj = j;
}
int ci = 0, cj = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if ((i != mi) && (j != mj) && (O[i][j] != 0) && (O[mi][j] != 0)
&& (O[i][mj] != 0)) {
ci = i;
cj = j;
}
int min;
if (O[mi][cj] > O[ci][mj])
min = O[ci][mj];
else
min = O[mi][cj];
O[ci][cj] += min;
O[ci][mj] -= min;
O[mi][cj] -= min;
O[mi][mj] += min;
}
private void optimPlan() {
Ap = new int[n];
Bp = new int[m];
Afp = new int[n];
Bfp = new int[m];
dc = new int[n][m];
int flag = 0;
do {
potenzial();
flag = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (dc[i][j] < 0)
flag = 1;
if (flag == 1)
cikl();
} while (flag != 0);
}
}
Информация о работе Реализация транспортной задачи линейного программирования в системе Android