Реализация транспортной задачи линейного программирования в системе Android

Автор работы: Пользователь скрыл имя, 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

Файлы: 1 файл

Диплом.docx

— 1.56 Мб (Скачать файл)

}

}

Правый клик на папку layout, далее New -> Other -> Android ->Android Xml Layout File. Даем ему имя: solve.

Добавляем туда нужные нам  элементы, пишем код:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:gravity="top"

    android:paddingLeft="20dip"

    android:paddingRight="20dip"

    android:background="#E5E1E2">

 

    <LinearLayout

        android:id="@+id/post"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        android:paddingBottom="10dip"

        android:paddingTop="10dip" >

 

        <TextView

            android:id="@+id/textView1"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_gravity="center_vertical"

            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="numberSigned"

            android:text="3" />

    </LinearLayout>

 

 

 

    <LinearLayout

        android:id="@+id/potr"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_below="@+id/post"

        android:orientation="horizontal"

        android:paddingBottom="10dip"

        android:paddingTop="10dip" >

 

        <TextView

            android:id="@+id/TextView01"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            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="numberSigned"

            android:text="4" />

    </LinearLayout>

 

    <EditText

        android:id="@+id/values"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/potr"

        android:layout_alignRight="@+id/potr"

        android:layout_below="@+id/potr"

        android:ems="10"

        android:hint="5 2 3 6"

        android:inputType="textMultiLine"

        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_parent"

        android:layout_height="wrap_content"

        android:layout_below="@+id/values"

        android:layout_centerVertical="true"

        android:text="@string/solve_button" />

 

    <TextView

        android:id="@+id/resultField"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_below="@+id/solve"

        android:textColor="#000000"

        android:textAppearance="?android:attr/textAppearanceMedium"

        android:text="" />

   

</RelativeLayout>

 

И у нас получается:

 

 

Правый клик на src - > trans.wert1go.namespace -> New -> Class.

Name: solve

Superclass: android.app.Activity

 

В этом активити пишем основной код при помощи которого и решается транспортная задача. Его очень много поэтому он будет в приложениях. В итоге у нас при нажатии на кнопку «Решить» приложение выдает ответ.  Выглядит это так:

 

 

Заключение

В ходе выполнения данной работы были изучены теоретические материалы про систему Android, освоена среда разработки Eclipse и комплекс средств разработки, предоставленный компанией Google «Android SDK», позволяющий использовать все основные функции Android в своем приложении.

Так же сделаны выводы, что платформа Google Android в данное время является одним из лидирующих среди смартфонов и сенсорных телефонов. В отличие от его основных конкурентов Android растет с «бешеной» скоростью. Буквально три года назад об этой платформе знали только те, кто интересовался высокими технологиями, а сейчас же все предпочитают приобретать гаджеты именно с этой операционной системой. Преимущества платформы очевидны — удобный и современный интерфейс, открытость и отсутствие необходимости лицензионных отчислений, а также простота разработки приложений. Все это делает ее очень привлекательной для производителей устройств и конечных пользователей. Наличие единой универсальной среды распространения программ тоже является одним из серьезных преимуществ платформы. Высокая распространенность системы и простота написания приложений делает платформу привлекательной для разработчиков.

 

Список литературы

  1. Голощапов А. Google Android: программирование для мобильных устройств. — CПб.: БХВ-Петербург, 2010г.
  2. Роджерс Р., Ломбардо Д. Android. Разработка приложений. — М.: ЭКОМ Паблишерз, 2010г.
  3. Коматинэни С., Маклин Д., Хэшими С. Google Android: программирование для мобильных устройств = Pro Android 2. — 1-е изд.. — CПб.: Питер, 2011г.
  4. Красс М.С., Чупрынов Б.П. Основы математики и ее приложения в экономическом образовании. — М.: Дело, 2001г.
  5. Ермаков В. Общий курс высшей математики для экономистов. — М.: Инфра, 2000г.
  6. Кузнецов А., Сакович В., Холод Н. Высшая математика. Математическое программирование. — Минск, 2001г.
  7. Акулич И.. Математическое программирование в примерах и задачах. — М.: Высшая школа, 1986г.
  8. Банди Б. Методы оптимизации. Вводный курс. - М.: Радио и связь, 1988г.
  9. Боборыкин В. Математические методы решения транспортных задач. — Л.: СЗПИ, 1986г.
  10. Геронимус Б.А. Экономико-математические методы в планировании на автомобильном транспорте. — М.: Транспорт, 1982г.
  11. Гилл Ф., Мюррей У., Райт М. Практическая оптимизация. — М.: Мир,  1985г.
  12. Лесин В., Лисовец Ю. Основы методов оптимизации. — М.: МАИ, 1995г.
  13. Летова Т., Пантелеев А. Экстремум функций в примерах и задачах. — M.: МАИ, 1998г.
  14. http://math.semestr.ru/transp/model_transport.php
  15. http://www.math.mrsu.ru/text/courses/e-learn/3.html#zachin
  16. http://devdb.ru/sony_ericsson_xperia_pro
  17. http://ru.wikipedia.org/wiki/Транспортная_задача
  18. http://ru.wikipedia.org/wiki/Android
  19. http://acer-club.ru/topic/7410-ос-андроид-что-это/
  20. http://ru.wikipedia.org/wiki/Eclipse_(среда_разработка)
  21. http://smashingsoftware.ru/review/android_sdk
  22. http://ru.wikipedia.org/wiki/Windows_Phone_7
  23. http://ru.wikipedia.org/wiki/Symbian_OS
  24. http://www.intuit.ru/department/os/bmos/30/2.html
  25. http://ru.wikipedia.org/wiki/Apple_iOS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ

 

Приложение

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.OnClickListener;

import android.widget.EditText;

import android.widget.TextView;

 

public class solve extends Activity implements

android.view.View.OnClickListener {

 

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(savedInstanceState);

setContentView(R.layout.solve);

Приложение

// Регистрируем кнопку

View mSolveButton = findViewById(R.id.solve);

mSolveButton.setOnClickListener((OnClickListener) this);

 

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 += "&nbsp;";

if (O[i][j] < 10)

result += "&nbsp;";

}

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.fromHtml(result));

}

 

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().toString());

m = convStrToInt(mEditB.getText().toString());

 

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.charAt(t))) {

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